{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Missing Value Support in pomegranate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Populating the interactive namespace from numpy and matplotlib\n"
     ]
    }
   ],
   "source": [
    "%pylab inline\n",
    "from pomegranate import *\n",
    "import seaborn\n",
    "seaborn.set_style('whitegrid')\n",
    "numpy.random.seed(0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The majority of machine learning algorithms assume that they are operating on a fully observed data set. In contast, a great deal of data sets in the real world are missing some values. Sometimes, this missingness is missing at random (MAR), which means that there is no important pattern to the missingness, and sometimes the missingness itself can be interpreted as a feature. For example, in the Titanic data set, males were more likely to have missing records than females were, and those without children were more likely to have missing records. \n",
    "\n",
    "A common approach to bridging this gap is to impute the missing values and then treat the entire data set as observed. For continuous features this is commonly done by replacing the missing values with the mean or median of the column. For categorical variables it is commonly done by replacing the missing values with the most common category observed in that column. While these techniques are simple and allow for almost any ML algorithm to be run, they are frequently suboptimal. Consider the follow simple example of continuous data that is bimodally distributed:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfMAAAFtCAYAAAATY4N4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3X98jfX/x/HnGfbL7JsfjbAh+8St\nlsyiNkOmwlCj/NhiRD+lIp9CKtRH4ptbRcVXIj9r+VmLTSrUp8Y45ceImllSzGdDModZzvcPOh/H\nmGPbuc6u7XG/3brddq7rnOt6XZfr6nne7/d1Xcdit9vtAgAApuXl6QIAAEDpEOYAAJgcYQ4AgMkR\n5gAAmBxhDgCAyRHmAACYHGEOuFHnzp314YcfGrKu6dOnq1evXi69d/ny5brttttKtb7Nmzfr5ptv\n1smTJ0u1HElauXKl2rdvL0natGmTmjVrpvz8/FIvV5IGDx6sqVOnlsmygPKqqqcLAMwqJiZGOTk5\n8vLyksViUUBAgMLDw/Xss8+qcePGkqQ1a9Z4tsgSOHDggDp16qRq1arJYrHIy8tLDRo00B133KGH\nHnpItWrVkiS1bt1aO3bscGmZmzZtkp+fn1q0aHHJ+XFxcYqLiyuT+o8fP66UlBT17dtXkjRnzpwy\nWS5QntEyB0phzJgx2rFjh7Zv367k5GRJ0jPPPOPhqsrG8uXLtWPHDqWlpWnSpEnat2+f4uLi9Pvv\nv1/1subOnavt27e7ocqi0tLSlJSUZMi6gPKCMAfKSO3atdWtWzft27fPMS0mJkYLFy6UJI0ePVrj\nxo3T+PHj1apVK3Xs2FFpaWmaO3euoqKidPvtt2vJkiWOz+bk5GjYsGG6/fbbFR0drWHDhunQoUOO\n+evXr1eXLl0UHh6up556qkh396pVq9SjRw+Fh4erQ4cOmjlzZom2y9/fX7fccoveeecdNWnSRFOm\nTJFUtDv8vffeU0xMjG655RZ16tRJCxYskCQ9/PDDWrdunSZNmqT+/ftLkpo1a6a5c+eqXbt2mj59\n+iW7/b/99lt17txZrVq10mOPPaZjx45JuvRwwt/7+bPPPtOIESO0a9cu3Xzzzdq3b58GDBigyZMn\nO967ZMkSxcbGKjw8XD169NBHH33kmDd69Gi9/PLLeu2119SmTRtFRkbqgw8+KNF+A4xEmANl5ODB\n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\nXA7zjh07Or3+66+/tH//flmtVg0cOLDMCwNKg1uB4EkXHn+AEVwO82HDhl1y+saNG7VkyZIyKwgA\nAFwdl29Nu5w2bdpo3bp1ZVELAAAoAZdb5pmZmUWmnTp1SmvWrFFgYGCZFgUAld3FXfUMF6E4Lod5\n9+7dZbFYZLfbnabXqFFD48ePL+u6AACAi1wO8y+//LLINB8fH9WqVUteXqXurQcAACXkcgo3aNBA\n9evX17Fjx/Tjjz9q27ZtOnz4cImCfP369WrWrJkOHDggu92u119/XZ07d1aXLl00derUq14eAACV\n2VWNmT/22GM6cOCAqlevLknKz89Xs2bNNHv2bF177bUuLcdms2nq1Km65pprJEmrV69Wenq6kpOT\nZbfblZCQoLCwMHXu3LkEmwMzYmwQAErH5Wb1pEmT1Lp1a3399deyWq2yWq3asGGD/vGPf+hf//qX\nyyucPn267rnnHscXgtTUVPXs2VPe3t7y8fFRr169lJKScvVbAgBAJeVymO/atUvjxo1TUFCQY1rd\nunU1fvx4bdmyxaVl7NmzR999950GDRrkmJadna2QkBDH65CQEGVlZblaFgAAlZ7L3ezVqlXTyZMn\n5evr6zT9zJkzxT7m9W92u13jxo3TCy+8oGrVqjmm22w2+fj4OF77+vq6/JOqVqvVxerNpaJuV27u\nUcffF27jhdMvnndufu5l511u+cUtryIwyzaFFRRIkjLcXK8790dBQdj5dWS4/JnLHYvnlnP1x7Ak\njZ/xxVWsP/eK7yl6nlXc86cibMOVuBzmbdu21fDhwzVixAg1bdpUFotFmZmZeuutt9S6desrfj4p\nKUmhoaG69dZbnab7+fnp9OnTjtc2m03+/v4u1RQREeFq+aZhtVor5HZJUlrWf8fGIyJaXnL6xfOS\n079QnTp1LjmvuOVfbnkVgamOEW9vSe49V929P85vwlWt43LH4rnlXP0xfDVyc3OdzhlX66io54+p\nzpcrKO5Licth/vzzz2vs2LFKSEhwTLNYLLr77rv14osvXvHzX375pTIyMhxPizty5Ijuv/9+SVJW\nVpbatm0r6dyFdqGhoa6WBQBApedSmP/55586dOiQpk2bpuPHj+u3336TJO3du1edOnWSn5/fFZfx\n3nvvOb2OiYnR/PnzlZGRoRkzZui+++6T3W7XsmXLNHLkyBJsCgAAldMVwzw3N1d9+vRR27Zt9cor\nrygwMNDx+NZXXnlFc+bM0YIFCxxXp1+tLl26aOfOnYqLi5PFYlH37t0VExNTomWhfCnpL0fxi1Oo\nLDjWUVaueDX722+/raZNm+qll14qMm/evHmqVauWZs2addUr/uqrr9SwYUNJ0siRI/X5559rzZo1\nevLJJ696WQAAVGZXDPOvv/4pWDazAAAToklEQVRao0aNcroC/W/VqlXTqFGjlJqa6pbiAADAlV0x\nzI8cOVLsBWmhoaE6fPhwmRYFAABcd8UwDwgIUF5e3mXnHzx40OVbyQAAQNm7Ypi3bdtWb7311mXn\nT5kyRZGRkWVaFAAAcN0Vr2YfOnSo7r//fh07dkwPPPCAGjdurLNnz+rnn3/W3LlztXPnTi1dutSI\nWgEAwCVcMcwbNWqkBQsWaOLEiRo4cKDTo1sjIyO1ePFip2erA0bhth4AOMelh8Y0b95cCxYs0JEj\nR3TgwAFJUuPGjR33mwMAAM9x+XGuklSrVi3VqlXLXbUAAIAScPknUAEAQPl0VS1zVF4Xjk8P693y\nktMvngegYuP8Lz9omQMAYHKEOQAAJkc3OzyC28pQ0ZjtmOZXDSsWWuYAAJgcYQ4AgMkR5gAAmBxj\n5ihTjKehsqgsx3pl2U6zo2UOAIDJEeYAAJgcYQ4AgMkR5gAAmBxhDgCAyRHmAACYHLemwVS4TQYA\niqJlDgCAyRHmAACYnKHd7GvWrNG7776r06dPq2bNmpowYYJuuOEGffDBB0pKStLZs2d16623aty4\ncfL29jayNFQiF3bVD+vd0oOVoDJiqAjuYFjL/Pfff9e4ceP07rvvKjU1VV26dNHzzz+vrVu3av78\n+UpKSlJKSory8vK0cOFCo8oCAMD0DAvzqlWraurUqWrQoIEkKTIyUvv27VNqaqpiY2MVGBgoLy8v\nxcfHKyUlxaiyAAAwPcO62YOCghQUFCRJKiws1IoVK9SpUydlZ2crJibG8b7g4GBlZWUZVRYAAKZn\n+K1p8+bN07vvvquQkBC98847evbZZ53Gx319fWWz2VxaltVqdVeZHlUetys396jj7wvru3C6+9ad\nW6rPX7w/L7ctF0tO/+/7erSpWaoaylp5PEYuJaygQJKU4eZ63bk/CgrCzq8jw2m6Ecd+SZX2nCmp\n8TO+cPxdns4Zs5wvpWF4mA8cOFCJiYlatWqV+vXrp0aNGqng/AkvSTabTf7+/i4tKyIiwl1leozV\nai2X25WW9d+LdiIiWl5yujvk5uaqTp06pVrGhfVKl9+Wi7n6PqOV12Pkks5/UXdnve7eH3+3NS5e\nh7uP/ZIqi3OmLJSXc8ZU58sVFPelxLAx87179+q7776TJFksFnXv3l35+fmyWCxO3eqZmZkKDQ01\nqiwAAEzPsDA/cuSInnvuOeXk5Eg69w3jzJkzevzxxx1XsRcWFmrx4sXq1q2bUWUBAGB6hnWzt27d\nWo899pgefPBBnT17Vt7e3nrjjTfUunVrDRkyRAkJCbLb7YqKilJ8fLxRZQEAYHqGjpn3799f/fv3\nLzI9MTFRiYmJRpYCAECFweNcAQAwOX41DbgAj9oEygaPTTYWLXMAAEyOMAcAwOQIcwAATI4xc1xS\ncWPHjCsDQPlCyxwAAJMjzAEAMDnCHAAAkyPMAQAwOcIcAACTI8wBADA5bk0DAJQbPAa2ZGiZAwBg\ncoQ5AAAmRzd7JXbxk9zo0gIAc6JlDgCAyRHmAACYHGEOAIDJMWYOoFLglidUZLTMAQAwOcIcAACT\no5sdldrFt+e5+j66aSsWuuBhdrTMAQAwOcIcAACTMzTMv/zyS917773q2rWr4uPj9dNPP0mSPvjg\nA3Xt2lWdO3fW2LFjVVBQYGRZAACYmmFj5jk5ORo9erQ+/PBDhYaGatGiRXrppZc0evRozZ8/XytX\nrlRAQICGDh2qhQsXavDgwUaVhgrO1XFxQLrU8cIYOso/w1rmVatW1dSpUxUaGipJioiIUGZmplJT\nUxUbG6vAwEB5eXkpPj5eKSkpRpUFAIDpGRbmtWvXVvv27R2vv/76a91yyy3Kzs5WSEiIY3pwcLCy\nsrKMKgsAANPzyAVwaWlpmjdvnsaMGSObzSZvb2/HPF9fX9lsNk+UBQCAKRl+n/kXX3yhV155RTNn\nzlRoaKj8/PycLniz2Wzy9/d3aVlWq9VdZXqUUduVm3vU6fX4GV8Yst6rlZub6+kSivD0sefp9bsq\n7Py5neHmel3ZHxce7xe//+Jz4UIFBafPfyZDyemXf195Ut7OmYv/39KjTc3Lvre4f6eSMsv5UhqG\nhvl3332niRMnas6cOWratKkk6frrr3fqVs/MzHSMq19JRESEW+r0JKvVath2pWWV/wvDcnNzVadO\nHU+XUUREhOcuijLyGCm1871u7qzX1f1x4fF+8b9fceeCt7fP+c9EcM6UkeLOn+L+nUrCVOfLFRT3\n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\nJh8fH0nSvHnzHMFe2eTm5jqdfLVr19Z//vMfD1bkWVWqVHHcrrlkyRK1b9++Uge5JE2ePFmjR4/2\ndBnlxoEDB2S32zV8+HAlJCQoLS3N0yV5VLdu3fT777/rrrvuUv/+/TVq1ChPl+RWtMw9aMmSJUW6\njp988km1a9dOixYt0s6dOzVz5kwPVedZF99kYbfbZbFYPFRN+fHFF19o6dKlmjNnjqdL8aiVK1eq\nZcuWTr/rACknJ0dvv/22fv/9dyUmJmrdunWV9rz55JNPVL9+fb3//vvavXu3xo4dq2XLlnm6LLch\nzD2od+/e6t27d5HpS5Ys0VdffaV3331X1apV80Blnle3bl3l5uY6Xh8+fFh16tTxYEWe980332jm\nzJmaPXu2atSo4elyPGr9+vX69ddftX79eh06dEje3t6qV6+eoqKiPF2ax9SuXVvh4eGqWrWqQkJC\nVL16dR05ckS1a9f2dGke8f333ys6OlqS1Lx5c+Xk5KiwsFBVq1bM2KObvZz59ddf9dFHH+ntt992\ndLdXRm3bttWaNWskSbt27VJQUFClHS+XpD///FNTpkzR//3f/3HBl6Q333xTy5Yt08cff6zevXtr\n6NChlTrIJSk6OlobN27U2bNndeTIEZ08ebLCjxMXp1GjRtq2bZsk6bffflP16tUrbJBLtMzLnSVL\nlujYsWN65JFHHNPef/99eXt7e7Aq47Vq1Uo33XST+vXrJ4vFonHjxnm6JI9avXq1jh49quHDhzum\nTZ48WfXr1/dgVShP6tatq86dO2vgwIGy2Wx64YUX5OVVedtrffv21fPPP6/+/fursLBQ48eP93RJ\nbsUT4AAAMLnK+7UNAIAKgjAHAMDkCHMAAEyOMAcAwOQIcwAATI4wB+Cy+Ph4vf76654uA8BFCHOg\nkkhMTLzss8w3bNigm266SYcPHza4KgBlgTAHKok+ffpozZo1ys/PLzJvxYoV6tChg4KCgjxQGYDS\nIsyBSuLuu++Wt7e3UlJSnKb/8ccf+vLLL9WnTx+dOnVKL774oqKjoxUeHq7evXs7Hol5sX/+858a\nMWKE43VhYaGaNWumr7/+WpJ06tQpvfzyy7rjjjvUsmVLDRgwQPv373ffBgKVGGEOVBLe3t669957\ntXz5cqfpn332mWrVqqV27dpp1qxZ+v7775WcnKz09HRFREQ4PUL2akyZMkW7du1SUlKSNm3apPDw\ncA0aNEh//fVXWWwOgAsQ5kAl0qdPH1mtVmVnZzumrVixQvfdd5+qVKmixx9/XElJSapZs6aqVaum\n2NhY/f777zpy5MhVraewsFArVqzQ0KFDVbduXfn4+Ojpp5/WsWPHlJ6eXsZbBYAfWgEqkdDQUIWH\nh2vFihUaMWKEMjMztXPnTr311luSpNzcXL366qtKT093GlsvKCi4qvXk5ubq5MmTGjp0qNPvaZ89\ne1YHDx4sm40B4ECYA5VM7969NW3aND399NNatmyZoqKi1KBBA0nS8OHD5efnp5UrV+q6665TRkaG\n7rvvPpeWe/bsWcfff/9870cffaSwsLCy3wgATuhmByqZ2NhYnThxQps3b9aqVavUp08fx7wdO3ao\nb9++uu666yRJO3fuvOxyfHx8dOrUKcfrCy9uq1mzpgIDA7Vnzx6nzxw4cKCsNgPABQhzoJLx8/NT\n9+7d9frrr6uwsFAxMTGOeQ0bNtS2bdt05swZpaWlae3atZKknJycIstp1KiRtm7dqoMHD+rEiROa\nPXu2qlWr5pgfHx+vGTNmKDMzU4WFhVq0aJF69uypEydOuH8jgUqGMAcqoT59+mj79u2Ki4tzCuBx\n48Zp7dq1atOmjebNm6fJkycrKipKgwYN0s8//+y0jL59++rGG29U165d1bNnT8XGxsrf398x/4kn\nnlC7du30wAMPqHXr1kpOTtasWbMUEBBg2HYClYXFbrfbPV0EAAAoOVrmAACYHGEOAIDJEeYAAJgc\nYQ4AgMkR5gAAmBxhDgCAyRHmAACYHGEOAIDJEeYAAJjc/wNoz5+JjYJqawAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f25fff5edd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X = numpy.concatenate([numpy.random.normal(0, 1, size=(1000)), numpy.random.normal(6, 1, size=(1250))])\n",
    "\n",
    "plt.title(\"Bimodal Distribution\", fontsize=14)\n",
    "plt.hist(X, bins=numpy.arange(-3, 9, 0.1), alpha=0.6)\n",
    "plt.ylabel(\"Count\", fontsize=14)\n",
    "plt.yticks(fontsize=12)\n",
    "plt.xlabel(\"Value\", fontsize=14)\n",
    "plt.yticks(fontsize=12)\n",
    "plt.vlines(numpy.mean(X), 0, 80, color='r', label=\"Mean\")\n",
    "plt.vlines(numpy.median(X), 0, 80, color='b', label=\"Median\")\n",
    "plt.legend(fontsize=14)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The data peaks around 0 and around 6. Replacing the missing values with ~3 will be inserting values into the data set that mostly don't exist in the observed values. The median is slightly better, but will still cause the imputed values to be in one of the two clusters. This has the effect of essentially increasing the variance of the appropriate distribution. Let's take a look at what the distribution looks like if we add 500 missing values and then impute them using the mean of the observed values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/jmschr/anaconda2/lib/python2.7/site-packages/numpy/lib/function_base.py:4016: RuntimeWarning: Invalid value encountered in median\n",
      "  r = func(a, **kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nZDUzkJ6eLicnJ/n5+cnHx0dZWVmW8/mSlJGRYXl88OBBdejQQcHBwapVq5YuXbqkX3755bZqKikp\n0YIFC2QymUoFbklJiS5cuKCAgAC9+OKLWr9+verWrWs1JX6z/nxR46+//iofHx85OzvL3d3daqcm\nPz9f2dnZFVqmn5+f0tLSrNrS09PVokWLW64TqA4IesAGioqKtHLlSp0+fVrh4eG3tayAgAC1a9dO\ns2fPVl5ennJycvTOO++oR48eql+/vrp06aLLly9r5cqVKioq0vbt2/X9999b/r558+Y6fvy4zp49\nqzNnzuif//ynmjRpUu4phesxm806duyYRo4cqaKiIo0bN67Uaz788EMNHz5cp06dknQtpM+fPy8/\nPz9J105LnDhxwnIuvyIWL16sCxcuKCcnRwkJCXr44YclSS1atFBGRoaOHDmiwsJC/etf/7Kc/vhj\nXdnZ2WVO9Q8aNEgbN27Ud999p5KSEm3evFk7d+6stO/wA/bCDXOAKjJz5kzLV7fc3d0VEBCghQsX\n6q677rrtZcfFxenNN99U79695ebmpu7du2vixImSrp3rj4uL05w5cxQXF6euXbtq2LBh2rZtmyQp\nOjpae/bsUe/eveXj46NJkyYpNzdXb775pho0aFChI9gBAwbIyclJZrNZDRs21MMPP6x33nnHcsOc\nP3vyySd15swZRUVFKS8vT3feeadGjRplCefBgwdr7ty5+vbbb/XFF1/ccN1OTk7q27evBgwYoNzc\nXHXt2lVjx46VJIWEhCgsLExPPPGEateurTFjxlhtz8MPP6z4+Hj16tVLixYtslpujx499Pe//12T\nJ09WVlaWWrZsqffee6/cG/kAjsLJbDab7V0EAACoGkzdAwBgYAQ9AAAGRtADAGBgBD0AAAZG0AMA\nYGCG+3pdamqqvUsAAMDmgoKCymw3XNBL5W+so0tNTTXstt0KxsMa42GN8SiNMbFmpPG43kEuU/cA\nABgYQQ8AgIER9AAAGBhBDwCAgRH0AAAYGEEPAICBEfQAABgYQQ8AgIHZ9IY59957r3x9fS3P27Vr\np9mzZ2vJkiVKSEjQ1atX9cADD2jKlClyc3NTUVGRpk2bpu+++04uLi4aMmSIYmJibFkyAAAOzWZB\nn5eXJycnJyUlJVm179u3T8uWLdP69etVp04djR49WitWrNBTTz2lJUuW6Pz580pMTNT58+f1+OOP\n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\nbqKBAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f25d0b492d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X = numpy.concatenate([X, [numpy.nan]*500])\n",
    "X_imp = X.copy()\n",
    "X_imp[numpy.isnan(X_imp)] = numpy.mean(X_imp[~numpy.isnan(X_imp)])\n",
    "\n",
    "plt.title(\"Bimodal Distribution\", fontsize=14)\n",
    "plt.hist(X_imp, bins=numpy.arange(-3, 9, 0.1), alpha=0.6)\n",
    "plt.ylabel(\"Count\", fontsize=14)\n",
    "plt.yticks(fontsize=12)\n",
    "plt.xlabel(\"Value\", fontsize=14)\n",
    "plt.yticks(fontsize=12)\n",
    "plt.vlines(numpy.mean(X), 0, 80, color='r', label=\"Mean\")\n",
    "plt.vlines(numpy.median(X), 0, 80, color='b', label=\"Median\")\n",
    "plt.legend(fontsize=14)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It doesn't appear to be that great. We can see the issue with increased variance by trying to fit a Gaussian mixture model to the data with the imputed values, versus fitting it to the data and ignoring missing values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f25d0bef650>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = numpy.arange(-3, 9, 0.1)\n",
    "model1 = GeneralMixtureModel.from_samples(NormalDistribution, 2, X_imp.reshape(X_imp.shape[0], 1))\n",
    "model2 = GeneralMixtureModel.from_samples(NormalDistribution, 2, X.reshape(X.shape[0], 1))\n",
    "p1 = model1.probability(x.reshape(x.shape[0], 1))\n",
    "p2 = model2.probability(x.reshape(x.shape[0], 1))\n",
    "\n",
    "plt.figure(figsize=(12, 3))\n",
    "plt.subplot(121)\n",
    "plt.title(\"Mean Impute Missing Values\", fontsize=14)\n",
    "plt.hist(X_imp, bins=x, alpha=0.6, density=True)\n",
    "plt.plot(x, p1, color='b')\n",
    "plt.ylabel(\"Count\", fontsize=14); plt.yticks(fontsize=12)\n",
    "plt.xlabel(\"Value\", fontsize=14); plt.yticks(fontsize=12)\n",
    "\n",
    "plt.subplot(122)\n",
    "plt.title(\"Ignore Missing Values\", fontsize=14)\n",
    "plt.hist(X[~numpy.isnan(X)], bins=x, alpha=0.6, density=True)\n",
    "plt.plot(x, p2, color='b')\n",
    "plt.ylabel(\"Count\", fontsize=14); plt.yticks(fontsize=12)\n",
    "plt.xlabel(\"Value\", fontsize=14); plt.yticks(fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "When we impute the missing values, it seems that one component is fit properly and one has drastically increased variance. In contrast, when we ignore the missing values, we fit a model that represents the underlying data much more faithfully.\n",
    "\n",
    "At this point, you may think that as long as the data comes from a single distribution it shouldn't matter if you do a mean imputation of the data. However, this has the effect of shrinking the variance inappropriately. Let's take a look quickly at data drawn from a single Gaussian."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtUAAADlCAYAAACcVgvvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3XdYVEffxvEvHQEVRGwIKpqgsYGo\nWAgGKwqKGlRsMUZjjJrYWzT2kkSJsWBMTMxjLIm9ACqxxfZgI7H3glgABQSkt33/4HFf1wWkL+Dv\nc11ccc+Zs3vvhjM7zJkzo6VQKBQIIYQQQggh8k1b0wGEEEIIIYQo7aRRLYQQQgghRAFJo1oIIYQQ\nQogCkka1EEIIIYQQBSSNaiGEEEIIIQpIGtVCCCGEEEIUkDSqhSigxo0bc+zYsQI9R5cuXfjjjz8K\nKVHhc3Z2LtH5hBBl0yeffIK3t3eBnmPmzJlMnDixkBIVvkmTJjF+/HhNxxCFQBrVpVz79u2xs7Mj\nPj5ebd++ffuwtbVl5cqVGkiWmW3jxo0aee1Dhw5x//79fB27c+dObG1tWb58eZb7u3Xrhq2trfLx\n5cuXadeuXb5e66WAgAD69+9foOd4nUKhoFOnTtn+/9+8eTOOjo6kpKQU6usKIYrX4MGD+fbbbzUd\nI1cePXqEra0tAwcOzHL/nDlzsLW15cyZMwCsW7euwA3iBQsWFLhhnpXp06czePDgLPfdvXsXW1tb\nLl26VOivK0ouaVSXAUZGRvz1119q2319fTE3N9dAIs1bvnw5wcHB+T7e3NycvXv38vraSNeuXSM6\nOrqA6YqHlpYWnp6e7Nq1S+19AOzatYsePXqgr6+vgXRCiLdZcHAwjx49UtmWmprKoUOHMDU11VCq\nvOnbty/nzp3j4cOHavt27txJ/fr1adKkiQaSCU2RRnUZ0K5dO/bs2aOyLTo6mvPnz9OyZUuV7QEB\nAfTs2RM7Ozvat2/Pjh07lPuSk5OZPXs2Tk5O2Nvb4+npyb///qvcP3jwYNasWcOUKVNo1qwZzs7O\n7Nu3L1cZz5w5g52dHUeOHKF9+/bY29uzePFibty4Qc+ePbG3t2fUqFHKXtPBgwfj7e3NxIkTsbOz\n4/3331d5LVtbW44ePap8vHPnThwdHQFwc3Pj1q1bfPHFF0yZMgWAmzdv8vHHH9OiRQscHR1ZvHgx\nqamp2eatW7cuAEFBQSrb9+7dq9Yr/WqWY8eO4eHhgb29Pa1bt2b27NnK95TTvld79adNm8a8efP4\n5ptvaNmyJa1bt+Y///mP8vVCQkLo3bs3TZo0wcvLi/3792Nra5vl1YrevXsTHh7O6dOnVbbfvXuX\nS5cu0adPHwCioqIYN24cbdq0wcHBgSFDhmTb09+/f3+WLl2qfPzgwQNsbW25e/cukPm7N2nSJOXv\n0ahRo4iKigIgPT2dRYsW4eTkhJ2dHW5ubhw4cCC7/w1CiHz4+++/cXFxwc7OjkmTJrF69Wp69+4N\nZNbFzZo14+TJk7i6umJvb8+IESOIi4tTHr9t2za6deuGvb093bt3588//1TumzZtGtOnT2fIkCF0\n7twZgJiYGCZPnqw850eOHElERESOGZ2dndm7d6/KthMnTlCnTh2MjY2V217thb9//z5Dhw6lefPm\nNG/enGHDhvHkyZM37ps2bRpffvklkPld0b17d3bv3o2LiwvNmjVj0qRJpKenA5CYmMjYsWNp0qQJ\nnTt35vjx49jb26t837xkb29PvXr12Llzp8r29PR09u7dS9++fQHIyMjA29sbFxcX5Wea3ZDBZcuW\nKY979bN6OfwuIyODFStW0LFjR5o2bUrv3r25cuWKsuz27dvp0qULdnZ2ODs7s2LFiiw7VUTRkEZ1\nGdChQwcuXLhAeHi4ctv+/ftp06YNhoaGym1Xrlxh6tSpjB8/nqCgILy9vVm8eDEnTpwA4JdffuHs\n2bPs3buXc+fO4ejoyNixY1Vea9OmTXTv3p0zZ87Qo0cP5s6dm+sTNikpiZMnT+Lv78+iRYv4z3/+\nw9KlS/nll1/YsWMHx48fV6m4tmzZQrdu3Th79iyjR49m0qRJKu8xO/7+/gCsXLmS7777jsTERIYP\nH06LFi04deoUu3bt4ty5c6xYsSLH53Fzc1Op9DMyMvD398fV1TXL8qmpqYwbN45Bgwbxzz//sHv3\nbi5fvsy2bdty3JeVffv28e6773Lq1CnGjBnDkiVLeP78OZA5/s7S0pLAwEBmzJjBDz/8kO17sLCw\n4IMPPlCr9Hfs2IG9vT3vvvsuAN9++y3R0dEcPHiQU6dOYWZmxtdff53j55OdqVOnkpSUhJ+fHydO\nnKB8+fKMGTMGyLx6cuDAAbZt28a///7LpEmTmD59OrGxsfl6LSGEqpiYGL788ksGDRrE2bNncXJy\n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\ntc/KysqKy5cvk5KSwuXLl9m6dSu6urpZDmesXbs29+7d4+bNmyQlJfHDDz+ozIbSv39/Nm3axD//\n/EN6ejoHDx7E3d2dBw8esHfvXnr16sXt27eBzM6Xp0+f5utzEPkjjeoypH79+lSoUCHbS2h16tRh\n2bJlrF+/HgcHB0aMGEHfvn3x9PQEYNasWRw9epSWLVvy22+/Kac+Gz58eK56Qwubu7u7cqq8lStX\n4u3tjYWFBQBfffUVly5donnz5ixZsoThw4erHNu/f3+8vb2ZMGECurq6rF69mocPH+Lk5IS7uzvm\n5ubMmjUrVzl69uxJTEyM8ubK7Njb2zNhwgSmT59O06ZN6d69OzY2Nnz55Zc57sur7777jrt379Km\nTRu8vb35/PPPgTdfpnz5R9XL/98v6evrM2fOHH7++WdatWrF33//zcqVK7G1taVr165qM3N8+umn\nmJiY0K5dO4YOHcqQIUNU9n/99dfUqlULd3d32rZty5UrV/jxxx/R1tZmypQplC9fnq5du2JnZ8ec\nOXNYuHChchYSIUTBVKlShUWLFvHrr7/Spk0bLly4gKenZ66H7rVr144vvviCGTNm0KJFC1avXs3q\n1atznG955syZ1K1bFw8PD9q2bcuFCxf46aef0NHReePrubu78/Tp0zcO/TA0NGTlypXs3LmTli1b\n8v7773P//n28vb1z3JdXY8eOpWbNmnTt2pWPP/6YYcOGAW+uX3v37s2NGzdo37698orfS5MnT+bu\n3bu0bNmSb775hkmTJtGjRw+mT5/OyZMnVcp26tSJTp064eXlRefOnXnvvfewsrJS7u/Tpw8DBw7k\nyy+/xMHBAR8fH3744Qdq1apFjx496NGjB8OGDaNJkyYMHDiQLl264OXllefPQeSPlkImMBQl0ODB\ng2nUqBFTp07VdJQSR6FQkJaWphxX7efnx5w5czh//ryGkwkhSoLU1FR0dXWVY4dnzZpFZGQkPj4+\nGk5WOrx6A/vTp095//332bNnD/Xr19dwMlHSSU+1EKXMxx9/zNSpU0lMTCQiIoINGzYUeJl0IUTZ\nEB8fT6tWrfj9999JT09XzrksdUTu+Pj44OHhQXh4OElJSaxevRpLS8tsZzER4lXF2qgOCAjAw8MD\nV1dX+vfvz61bt9TK3LhxAy8vL+UlC00MOxCiJFuwYAExMTE4OTnRvXt3atasyYwZMzQdSwhRAhgb\n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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f25d0cc3750>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X = numpy.concatenate([numpy.random.normal(0, 1, size=(750)), [numpy.nan]*250])\n",
    "X_imp = X.copy()\n",
    "X_imp[numpy.isnan(X_imp)] = numpy.mean(X_imp[~numpy.isnan(X_imp)])\n",
    "\n",
    "x = numpy.arange(-3, 3, 0.1)\n",
    "d1 = NormalDistribution.from_samples(X_imp)\n",
    "d2 = NormalDistribution.from_samples(X)\n",
    "p1 = d1.probability(x.reshape(x.shape[0], 1))\n",
    "p2 = d2.probability(x.reshape(x.shape[0], 1))\n",
    "\n",
    "plt.figure(figsize=(12, 3))\n",
    "plt.subplot(121)\n",
    "plt.title(\"Mean Impute Missing Values\", fontsize=14)\n",
    "plt.hist(X_imp, bins=x, alpha=0.6, density=True, label=\"$\\sigma$ = {:4.4}\".format(d1.parameters[1]))\n",
    "plt.plot(x, p1, color='b')\n",
    "plt.ylabel(\"Count\", fontsize=14); plt.yticks(fontsize=12)\n",
    "plt.xlabel(\"Value\", fontsize=14); plt.yticks(fontsize=12)\n",
    "plt.legend(fontsize=14)\n",
    "\n",
    "plt.subplot(122)\n",
    "plt.title(\"Ignore Missing Values\", fontsize=14)\n",
    "plt.hist(X[~numpy.isnan(X)], bins=x, alpha=0.6, density=True, label=\"$\\sigma$ = {:4.4}\".format(d2.parameters[1]))\n",
    "plt.plot(x, p2, color='b')\n",
    "plt.ylabel(\"Count\", fontsize=14); plt.yticks(fontsize=12)\n",
    "plt.xlabel(\"Value\", fontsize=14); plt.yticks(fontsize=12)\n",
    "plt.legend(fontsize=14)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Even when the data is all drawn from a single, Gaussian, distribution, it is not a great idea to do mean imputation. We can see that the standard deviation of the learned distribution is significantly smaller than the true standard deviation (of 1), whereas if the missing data is ignored the value is closer."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This might all be intuitive for a single variable. However, the concept of only collecting sufficient statistics from values that are present in the data and ignoring the missing values can be used in much more complicated, and/or multivariate models. Let's take a look at how well one can estimate the covariance matrix of a multivariate Gaussian distribution using these two strategies. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "n, d, steps = 1000, 10, 50\n",
    "diffs1 = numpy.zeros(int(steps*0.86))\n",
    "diffs2 = numpy.zeros(int(steps*0.86))\n",
    "\n",
    "X = numpy.random.normal(6, 3, size=(n, d))\n",
    "\n",
    "for k, size in enumerate(range(0, int(n*d*0.86), n*d / steps)):\n",
    "    idxs = numpy.random.choice(numpy.arange(n*d), replace=False, size=size)\n",
    "    i, j = idxs / d, idxs % d\n",
    "\n",
    "    cov_true = numpy.cov(X, rowvar=False, bias=True)\n",
    "    X_nan = X.copy()\n",
    "    X_nan[i, j] = numpy.nan\n",
    "\n",
    "    X_mean = X_nan.copy()\n",
    "    for col in range(d):\n",
    "        mask = numpy.isnan(X_mean[:,col])\n",
    "        X_mean[mask, col] = X_mean[~mask, col].mean()\n",
    "\n",
    "    diff = numpy.abs(numpy.cov(X_mean, rowvar=False, bias=True) - cov_true).sum()\n",
    "    diffs1[k] = diff\n",
    "\n",
    "    dist = MultivariateGaussianDistribution.from_samples(X_nan)\n",
    "    diff = numpy.abs(numpy.array(dist.parameters[1]) - cov_true).sum()\n",
    "    diffs2[k] = diff"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nLVpU5DFHjx4lPz+fjRs3EhAQUCyW2bNns3fvXubPn8/27dt59913+fbbb1mzZg1Q8KVfv359+vfv\nz969ewkICODixYuMGjUKe3t7fvjhB7777juuXbvGiy++iEajKfE5nz59muzsbAIDA+96XszMirbq\nrV27lgULFvDGG2+wbds2vvjiC44ePcr7779/95N7B51Ox6uvvoqzszM//fQTmzZt4qGHHmLs2LHE\nxMSUuv5O6enpvPTSS3h6erJmzRr9xdCrr75KcnJysXPbt29fNm3axMiRI1mxYgXbt28vMc68vDyO\nHz9+z1qkOnXq6GtoEhISeO6551AoFPz4449s2LCBpk2b8sorrxAZGUnHjh1xcXHh999/L7KPbdu2\n4eLiQqdOnQgPD2fatGk8+eSTbNmyRf/Ze+utt4o8Jicnhy1btrBy5coS+zYY+jrFxcWxYsUKPvzw\nQ9atW4ejoyPvvPMOOTk5AKxbt445c+bwyiuv8NtvvzFkyBAmTpzIrl27ANiwYQNTp06ld+/ebNy4\nkRkzZrB+/Xo++uiju56zQp06dcLe3p7Nmzfrl2VnZ7Njx44Sv0/efvttoqOj+fbbbwkLC+P5559n\n1qxZ/P333/rnbGFhwahRo9i7dy+enp6lnqtatWoxY8YMvv/+e86fPw8UXOjFx8cza9asUp/Dg06S\nfjV16NAhAgICSvy5fv16kW179+5Nly5dcHd31y9TqVS8+eab1KtXDwsLC1auXElAQAATJkygUaNG\n+Pn5MXfuXOLi4oqUtq5fv860adNo3LhxmZoR2rRpw7Bhw/D29uaxxx6jcePGnDhxotTH9ejRAxsb\nG3777Tf9stDQUPr06VMsOZWVvb095ubm+qYSKyurIut9fHxo3LgxO3fu1C+7fv06J0+e1LdJPvfc\nc6xfv56uXbvi6elJ586d6d69O/v27Suyr5s3bzJ9+nQaNGhQYrvl22+/zY8//khgYCBeXl707dsX\nf39//X4cHR1RKpX6ZgELCwu+//57bGxsmDdvHs2aNSMgIIA5c+Zw7tw5/ZfinQovnkoq5d9N3759\n+e233wgJCcHT05PAwEAGDBhQ7DneS1paGvHx8fTu3ZvGjRvj7e3NuHHjWLVqFY6OjqWuv5OVlRXr\n169n+vTpNGzYkAYNGvDSSy+hVquLlap79+7NwIEDqVevHqNHj8bGxuau772UlBTy8vKoU6eOQc9r\n/fr15OTksGDBAlq2bEnjxo2ZPXs2rq6u/PTTT6hUKh5++OEi7yFAn+RUKhV+fn5s3ryZkSNH4uXl\nRcuWLXn66ac5fvw46enpRWIbM2YMLVq0KPGcGPo63bhxgw8//BA/Pz+aNGnC0KFDuXXrFteuXQMK\nCgkDBgzg8ccfx9vbm+HDhzN69Gj9e+fbb7+lW7dujB07lgYNGtCnTx/Gjh3Lr7/+Slpa2j3Pl5mZ\nGX379i1SxV/YfNe9e/di28+bN49vv/2Wli1bUqdOHZ555hm8vLz0z8nZ2Rko6P/j5uaGSqUy6Fz1\n6dOH3r178/7775OQkMDChQuZNGkSHh4e94zfFEhHvmqqMCmX5PbkDpTYIatly5ZF/j916hRPPvlk\nkWUNGzbEwcGB06dP88gjjwAFH7LatWuXOV5fX98i/zs7O5f6BQEFbex9+vRhw4YNvPDCCyQmJhIe\nHs7SpUvLHEN5hISEsHr1ambNmoVSqWTHjh3Y2dnpv6AsLCxYu3YtO3fuJDExEY1GQ25ubrEvjyZN\nmmBhYXHX4ygUCpYuXcrevXtJTk5Gq9WSk5ND27Zt7/qYEydO0LZtW2xsbPTLmjVrhqOjI5GRkfTo\n0aPE40BBdebt5syZw88//1xkWWEtkJWVFTt37mT8+PHcuHGDvLw8/Y+hatWqRUBAALNmzeLChQv6\n6trbn19p629nbm5OXFwcH3zwAefOnUOtVuur7FNTU4tse/t7T6lU6i8ySlJ4fu71Wt3u1KlTNGnS\npMgFsFKppFWrVpw5cwYoeA/99NNPnD9/nqZNm3LmzBmuXbumv3C0sbEhIiKCKVOmEBMTQ05Ojv71\nSU1Nxd7eXr/vOz+3tzP0dXJ1ddWXiOG/xJmamkp2djYXLlxg6NChRR7zzjvvAKBWq7l06RLPPvts\nkfXt27cnPz+fc+fOldrXZsCAAfz888+cOXOGli1bsmnTJnr16lVie3tubi6ff/45hw8fJiUlBZ1O\nR1ZWVrHXuCT3OldQ0AEwJCSEESNG6JuThCT9asvKyor69esbtK2trW2py9RqdYnb2djYFOklX9I2\nhrizFK1QKO7Zrnq7AQMGsH79eqKiojhw4ABOTk60b9+euLi4csVSFv3792fhwoUcOXKEoKAgtm3b\nxsMPP6z/gpowYQKHDh1i6tSp+Pn5YWlpqa9Wvd29zptOp2P06NGkpKQwefJkmjVrhrm5OVOmTLln\nbGq1mr/++qtYc0FWVhZJSUklPqbwyz42NrZIe/tLL72k/yI/fvw477zzDlqtFvjvgmDChAl07twZ\na2tr1qxZw7Jly+4Z352++eYbli1bxm+//caiRYtwcXHhtddeY/jw4Qatv92JEycYPXo03bt3Z/78\n+bi6upKSksKQIUOKbVuW956TkxOWlpYGD1tUq9Ul1njZ2trqPzdBQUG4ubmxY8cOmjZtyvbt26lT\np47+dVu2bBmffPIJL7/8Mn379sXOzo5du3YVqy5XqVTFnsvtDH2d7qxpKrzQ0el0+mR6t170hc9p\n3rx5RZoLC8/n3d53t2vXrh21a9dm48aN1K5dm3379rF48eISjzVixAgcHByYNm0a3t7emJmZMXr0\n6FKPUdq5AnBxcaF3796sXbuWN998s9R9mgpJ+ibC3t6+xCFwarW6SEnDGDp27Iibmxvbtm1j//79\n9OvXT1+Nd7vbv7wKZWZm3texGzdujI+PD7///jv16tXTdwqDgnbl3bt38+qrrzJ48OByH/PcuXOc\nO3eODz/8sEi/gvT09Hv2Vre3tyc4OLjEi4O7Nb20atUKe3t7duzYUaQjpLOzs77Ed+fcAVu2bOGR\nRx5h1KhR+mUllfLvTKQZGRlF/q9Vqxbjx49n/PjxREdHs3LlSmbPnk39+vXp2rVrqetvt3XrVlQq\nFQsWLNBfgBWWrO+HSqUiMDCQsLAwxo0bV2IT0sGDB7G2tsbPzw97e3tiY2OLbZOenq7/3CiVSvr1\n68fOnTsZM2YM27dvLzJkbcuWLQQFBRVpwy/PHc0NfZ3uxcnJCYVCcdfhsIXvq1deeaXYsDvAoCGo\nCoWCkJAQwsLCaNCgAXZ2dnTp0qXYdocOHSIxMZF58+bRqVMn/fKUlBRDn849RUVF6fuO/O9//6N7\n9+5GH+5cHUibvolo3bo1R44cKbLs/PnzqNXqYlXzVU2lUtGvXz/CwsI4ceJEsQ53hQq/kG6v+jNk\nOE9pX7AhISHs2rWLP//8U9/5CgqqyHU6XZHmjqSkJMLDw8v0pV34xXz7fqKiojh37lyx/dz+v6+v\nL9HR0Xh7e1O/fn39T15enj6B38nCwoLhw4cTGhp61yR56dKlIv/n5uYWiS0nJ4cdO3YUicfOzq5Y\nlfnt7ebx8fFs3bpV/3+DBg2YMWMGdnZ2nD9/vtT1d8rLy8PR0bFIlXBoaGixc1Qezz//PNeuXSvS\nS7xQcnIykydP5ttvvwUKPjfnz58v8tzz8/M5depUkc9NSEgIZ86cITw8nMuXLxdJmHl5eUXOr06n\n03d0K8tzMeR1Ko2FhQVNmjQp9l3wwQcfsGDBAuzs7GjUqBFxcXFF3nOF7emG9vMZOHAgcXFxfP/9\n9/Tp06fEIbIlfS7+/PNP0tPT7/m5MIRGo2HKlCkMHDiQhQsXotVqi9RcmDJJ+tVUXl4eiYmJJf7c\nvHmzzPsbNWoUJ06c4H//+x/R0dFEREQwceJEGjRoUGxonDEMHDiQ6Ohoateufdee582bN0elUrF0\n6VKuXr3K33//zbp16+6531q1ahEdHc3Jkyfv2lwQEhJCdHQ0a9as0Xe+goJSkbe3N+vWrePixYtE\nRETwyiuv0Lt3b5KSkjh37lyxtvOSNGzYEHt7e1avXs3Vq1fZs2cPkydPpkePHly9epUrV67oYz1z\n5gyRkZEkJSUxYsQIrl+/zvTp0zl79iyXLl3i008/ZdCgQVy4cOGux3vttdfo3LkzI0eOZPny5Vy8\neJGYmBj27dvHxIkTmTVrFgMGDND3DfH39ycsLIzIyEhOnz7NSy+9pC+ZHTp0iJycHFq1akVkZCRh\nYWFcuXKFr776qsj5VKvVTJgwgYULF3L58mViYmJYuXIlmZmZtG3bttT1d/Lz8yMxMZG1a9dy7do1\nvvrqK1JSUjA3N+fkyZP3VRrs3r07o0aN4qOPPuLjjz/Wt8Fv3bqVZ599FltbW2bOnAnA4MGDsbGx\nYcKECfoLtcmTJ5OWlqYfIgsF/RW8vLyYM2cOzZo1o1mzZkWey969e4mIiODChQuMHz9eP149IiLC\n4JojQ14nQ4waNYrt27fzww8/cOXKFdasWcPq1atp3bo1AKNHj2bjxo2sXLmSK1eucPLkScaPH8/I\nkSMNGrYH6Ds9Xr58Wd9f6E6tWrXCzMyMFStWcO3aNcLCwvjmm28IDAzk/Pnz+hqpWrVqcezYMaKi\nogzqJwSwdOlSYmNjeeedd7CysmL69OmsWrWqWLOcKZLq/Wrq8OHDBAcHl7jO1dW1TD2rAbp06cLn\nn3/O4sWLWbZsGTY2NnTp0oWJEyca3KmpMvn7++Pt7U3v3r3vOitbvXr1mDZtGl9//TUDBgygdevW\nfPDBB/ccWjh06FD++ecfhg4dyltvvVVi5x9vb29atWrF6dOniw3pmTdvHtOnT+fxxx+nfv36TJo0\nCS8vL/0+by+93o2trS2ffPIJc+bMYeDAgTRv3pwPPviArKwsxowZwzPPPEN4eDijRo1i+vTpPPvs\ns3z88cf079+f5cuXM3/+fJ5++mksLCzw8fFh6dKlNG3a9K7Hs7Cw4JtvvmHdunWsX7+eRYsWkZub\ni6urK4GBgSxfvrxIder06dOZMmUKzzzzDB4eHrz++usEBwdz7NgxXn75ZVatWsXzzz/P+fPnmTZt\nGkqlkscee4zRo0fz3nvvAQXNJIsWLeKrr77StzE3bNiQzz77DH9/f4BS199uwIABHDt2jHnz5qHT\n6Xj44YeZOXMmDg4O/PTTT1hbW5fYG9xQEydOJDAwkB9++IH169eTl5dH3bp1eeyxxxg5cqS+ROvi\n4sLKlSuZO3cuzzzzDDqdDl9fX5YvX07jxo31+1MoFPTr149ly5YxYcKEIsd68803iY+P58UXX8TB\nwYEXXniBYcOGcfHiRaZNm2ZwPxpDXidDPPHEE6SlpbF8+XLmzp2Lt7c3H3zwAb179wYKLnR0Oh3L\nly9n3rx51KpVi3bt2rFixYoyfVc88sgjrF69mvbt25e4vm7dusycOZPFixezadMmAgIC+PTTTzl5\n8iRTp05lzJgxrFu3jpdffpn58+czbNgwlixZUupxo6OjWbRoEdOmTdPXiHXr1o0+ffowZcoUNm7c\naNKT+Ch091tXJoQQQogaQar3hRBCCBMhSV8IIYQwEZL0hRBCCBMhSV8IIYQwEZL0hRBCCBPxQAzZ\ni4iIMHYIQgghRJW617077uaBSPpQvicvDBcRESHnuArIea58co4rn5zjylfewq5U7wshhBAmQpK+\nEEIIYSIk6QshhBAmQpK+EEIIYSIk6QshhBAmQpK+EEIIYSIk6QshhBAmQpK+EEIIYSIk6QshhBAm\nQpK+EEIIYSIk6QshhKhSMalxnLgRaewwTJIkfSGEEFVq4cHlfLh7IdG3rhk7FJMjSb+a6tmzJ23a\ntCEjI6PYuq1bt+Lj48PChQuNEJkQQpRfSnYal29dQ4eO74+tQ6fTGTskkyJJvxqzsbFhx44dxZZv\n3rwZFxcXI0QkhBD351R8FADmKnNOJZwl4vpJI0dkWiTpV2PdunVj06ZNRZalpKRw+PBh2rdvr1+2\nfft2Bg0aRJs2bejZsyfr1q3Tr8vJyWHGjBkEBwcTEBDA4MGDOXr0qH79iBEj+Prrr3n33XcJDAzk\noYceYuvWrZX/5IQQJunEjYKk/0rQcJQKJauOryNfqzFyVKZDkn411qtXL44dO0Z8fLx+WVhYGJ07\nd8bKygqAU6dOMXHiRMaPH09ERASfffYZH3/8MXv27AFgyZIlHDp0iNDQUP755x86dOjAuHHjihzn\nxx9/ZODAgRw8eJBHH32UWbNmSZWbEKLC6XQ6TsZHYW9pR5f6QfRuFExcegK/X/jb2KGZDDNjB2AM\nyzafZt/x2Co9Zhf/Oowa2KpMj7G3t6dHjx6Ehobyf//3f0BB1f6LL76or/Zft24dDz30EN26dQMg\nICCAQYMGsWHDBrp27crLL7/MyJEjsbOzAyAkJIQlS5aQkJCAu7s7AH5+fnTt2hWAhx9+mO+++47k\n5GRcXV0r5LkLIQTA9fR4krNu0bleW5QKJU+1foQ9Vw/x6+ktdG3QHjsLW2OH+MCTkn41N2jQIEJD\nQwGIiYkhOjqahx56SL/+6tWr7Ny5E19fX/3PmjVruHHjBgDJyclMmTKFjh070rp1a4YMGQJAbm6u\nfh9169bV/11Yg5CdnV3pz00IYVoKh+n5ejQHoJaVA0+06I86N4P1p8OMGZrJqNKS/rlz53jttdd4\n/vnnGT58OHFxcUyePJn8/HzMzMyYN28ebm5uhIaGsnLlSpRKJUOGDGHw4MEVGseoga3KXOo2luDg\nYKZOnUpkZCS7d+8mJCQEM7P/XjYrKyueeuopZs2aVeLjx48fj0qlYv369Xh5eREVFcVjjz1WZBul\nUq79hBCV70R8QdL3q91Cv6x/sx7suPg3YRd28XDTbtS2czNWeCahyr7tMzMzmT17Np06ddIvW7Bg\nAU8//TQ//PADffr0Yfny5WRmZrJ48WJWrFjBqlWrWLJkCSkpKVUVZrWjUqkYMGAAW7duZevWrTz6\n6KNF1nt7e3P27Nkiy+Lj48nLywPgxIkTDBkyBC8vL6CgD4AQQlS1fK2GMwnn8bRzx832v9FHFipz\nhvk9jkar4cfjG4wYoWmosqRvYWHBd999p29HBpgxYwZ9+/YFwMnJiZSUFI4fP46vry/29vZYWVkR\nFBTEkSNHqirMamnQoEFs2bKFvLw8/Pz8iqx7+umnOXHiBD///DO5ublcuHCBZ599Vt/rv169ehw/\nfpy8vDzCw8P1fQFu7xwohBCV7ULyZbLys/Gt3bzYuk71Amnm0oiDMUeJTDxvhOhMR5UlfTMzM317\ncSEbGxtUKhUajYbVq1czcOBAkpKScHZ21m/j6upKYmJiVYVZLTVv3hwHB4di1fIADRs2ZP78+axc\nuZK2bdvy0ksv8fTTT+ubRKZPn85ff/1F+/btWb58OR999BHBwcG8+OKLREVFVfVTEUKYKH3VvkeL\nYusUCgXPtXkSgO+PrkOr01ZpbKZEoavisVkLFy7EycmJ4cOHA6DRaHj33Xdp2LAhY8eOJTQ0lFOn\nTjFlyhQA5s+fT506dXj66afvus+IiIgqiV0IIUT5rIoJJS47kXENR2Cpsihxm9AbfxGpvsgAj260\nsm9axRHWPG3bti3zY4w+ZG/y5MnUr1+fsWPHAuDh4cGuXbv06xMSEmjTpk2p+ynPkxeGi4iIkHNc\nBeQ8Vz45x5XvznOcmZvFjYvLaOrSkM7tO931cd4ZDXhz60zC004wJPgJLM1KvjgQ5S/sGrXbdmho\nKObm5rzxxhv6Zf7+/pw8eZK0tDQyMjI4cuQIQUFBRoxSCCHE/TiVcBatTotfCe35t3OzdeERn14k\nZ93it7M7qyg601JlJf1Tp04xd+5cYmNjMTMzY/v27SQnJ2NpacmIESMAaNy4MTNnzmTChAmMHj0a\nhULBmDFjsLe3r6owhRBCVLB7teffaVCLvvx1aT8bo3bQq1EXHK1rVXZ4JqXKkn7r1q1ZtWqVQdv2\n69ePfv36VXJEQgghqsLJG1FYm1nRxKVhqdvamFszxHcg3x5ezZpTm3ml3fAqiNB0yKwsQgghKk1i\nRjJx6gRaujfFTKky6DE9GnamkZM3V27FVHJ0psfoHfmEEEI8uE7+eyvdwql3DaFSqni/5wS0yI2/\nKpokfSGEEJWmcL7926feNYSF9NyvFFK9L4QQolJodVpOJpzF2dqROva1jR2OQJK+EEKIShJ9K4b0\nHDV+Hi1QKBTGDkcgSV8IIUQl+e+ueoa354vKJUm/mhoxYgRz5841dhhCCFFuJ/9N+mXpxCcqlyR9\nIYQQFS43P5eoxIvUd6xLLSsHY4cj/iVJvwbYtWsXPXr0oE2bNrz99tt8+eWXPPHEEwAcPHiQwMBA\n9u7dS79+/QgICOCll15CrVbrH//rr78SEhJCQEAAAwcOZM2aNfp1kyZNYvLkyYwcOZKHH34YgNTU\nVN555x2Cg4MJCAjglVdeITU1tWqftBCiRotMukCeNh8/KeVXK5L0q7nU1FTeeOMNhg8fzqFDhwgO\nDmblypVFtsnKymLz5s388ssv/Pbbbxw/fpz169cD8Ndff/HRRx8xffp0/vnnH9566y1mzZpFeHi4\n/vF//vknI0aMYPv27UDBTZDUajWbN29mz549ODk58dlnn1XdkxZC1HjlHaonKpdJjtNfdWwdB64d\nqdJjdqwXyIh/7xddFn///TfP7LhaAAAgAElEQVQWFhaMHDkSMzMzBg0axNq1a8nMzNRvo9VqeeGF\nF3BwcMDBwQE/Pz8uXrwIwNq1awkJCaFjx44A9OjRg06dOvH777/TqVPB3a48PT3p3bs3ADdv3uSP\nP/5g8+bNODk5AfDuu+/SqVMnLl26RKNGje7rPAghTMOJ+CjMlWa0cG1i7FDEbUwy6dck8fHx1K5d\nGzOz/16q5s2bc+RI0YuWunXr6v+2trYmJycHgGvXrhW7S2GjRo2IiflveksvLy/931evXgXgySeL\nXqAolUri4uIk6QshSpWRn8WVlBh8PXxkkp1qxiST/og2T5ar1G0MOp2uSMKHggR8p3uNgS1pXV5e\nnv7v2/dvZWUFFDQLuLq66pfLPciFEIa6knUdAF8D7qonqpa06Vdzrq6uxMXFodVq9csiIyMNfry3\ntzcXLlwosuzSpUvUr1+/xO3r1q2LSqXi7Nmz+mVarZakpKQyRi6EMFXRmbEA0omvGpKkX8116dKF\n9PR0fvrpJ3Jzc9m0aROXLl0y+PFPPfUUW7Zs4fDhw+Tn5/P7779z4MABBg0aVOL2dnZ2DBgwgM8+\n+4zY2FhycnJYuHAhs2fPRqPRVNTTEkI8oHQ6HdFZsdhb2NLAqZ6xwxF3kKRfzbm7u/PRRx+xdOlS\nOnfuzLFjxxg8eHCJVfwl6datG6+//jpTp06lXbt2fPnll3z55Zf4+fnd9THvvfcejRs35rHHHqNL\nly4cO3aMd955B5XKsNtiCiFM1/X0eNLzM2jt0RylQlJMdaPQ6XQ1/t6FD3p7c15eHmZmZvq2+enT\np5OcnMzixYurLIYH/RxXF3KeK5+c48oVdu4vlh/9hZeDhtGrcbCxw3lglfd9LJdh1VxGRgYdO3bk\n+++/R6PREBkZybZt2+jWrZuxQxNCPED2XjnEy6GTuJV1fxNxnUk8D4CvjM+vliTpV3O2trZ8/vnn\nbNy4kbZt2/Laa68xdOjQYkPqhBDifhy/EcmtrFTOJRveZ6gksWk3sFCa42bjXEGRiYpkkkP2aprg\n4GCCg6WaTAhReRIykgGIS08o9z60Wi031Im4mjvKrXSrKSnpCyGEIPHfpH89Lb7c+0jKvEm+Nh9n\n81oVFZaoYJL0hRDCxOVrNSRn3QIgLr38Sf/6v491tpCkX11J0hdCCBN3M/MWhQO5rqvLX71fmPSd\npKRfbUnSF0IIE1fYng+QnqNGnZNRrv0U9geQ6v3qS5K+EEKYuML2fDsLW+C/EntZFSZ9JwuHiglM\nVDhJ+kIIYeIKS/qFc+WXtwd/XHo8Tla1sFTKnfWqK0n6Qghh4gpL+v61WwLlK+nn5ueSlHkLT3v3\nCo1NVCxJ+kIIYeISM5NRKBS09vABylfSv6FORIcOL3uPig5PVCBJ+kIIYeISMpJxsXbC1cYZKzPL\ncg3bK6wd8JSkX61J0hdCCBOWr8nnZlYKbrYuKBQKPO3diVMnoNVpy7SfwtoBqd6v3iTpCyGECUvO\nKhij72ZbMFe+p70HuZo8bmamlGk/hUnfS5J+tSZJXwghTFhhz313W1fgv6Rd1s58cenxKBVK/X5E\n9SRJXwghTFiiPum7AOg74pU16V9XJ+Bu64KZSu7jVp1J0hdCCBNWWNJ3+zfpF3bEK0sPfnVOBuk5\naum5XwNI0hdCCBOWWCzpF1Tvl6UHf5y6sBOfJP3qrkqT/rlz5+jduzc//PADAHFxcYwYMYKhQ4cy\nbtw4cnNzAQgNDeXJJ5/kqaeeYu3atVUZohBCmJTEjGSUCiUu1o4A2Jhb42jlUKbq/cLb8UrP/eqv\nypJ+ZmYms2fPplOnTvplX3zxBUOHDmX16tXUqVOHtWvXkpmZyeLFi1mxYgWrVq1iyZIlpKSUrRep\nEEIIwyRkJONi44RKqdIv87T3IDHjJnmaPIP2EacuSPrSc7/6q7Kkb2FhwXfffYe7+39vioMHD9Kr\nVy8AevXqRXh4OMePH8fX1xd7e3usrKwICgriyJEjVRWmEEKYjDxNHreyUvWd+Ap52rujQ0e8Osmg\n/VxPl+r9mqLKulmamZlhZlb0cFlZWVhYFNyYwc3NjcTERJKSknB2dtZv4+rqSmJiYqn7j4iIqNiA\nRTFyjquGnOfKJ+e4wK3cVHToUGTpipwTbWpBCX/Psf00s2tQ6n4uxUdjrjDj8pmLRCsUgJzj6sqo\nYysU/745AHQ6XZHfty+/fbu7adu2bcUGJ4qIiIiQc1wF5DxXPjnH/zlxIxKuQgvvZrRt/d850cWa\nsWvvIazd7Wjb4t7nSqvTsuDy93jVqk1QUBAg57gqlPeiyqi9962trcnOzgYgPj4ed3d3PDw8SEr6\nr0opISEBNzc3Y4UohBAPrDt77hcqy7C9W1mp5GhyZbheDWHUpN+5c2e2b98OwI4dO+jatSv+/v6c\nPHmStLQ0MjIyOHLkiP7qUQghRMVJzCw6MU8hD1tXlAqlQT3449Kl535NUmXV+6dOnWLu3LnExsZi\nZmbG9u3b+fTTT5k0aRI///wzXl5eDBo0CHNzcyZMmMDo0aNRKBSMGTMGe3v7qgpTCCFMRoK66BS8\nhcxUZrjbuhg0Vr/wwkBK+jVDlSX91q1bs2rVqmLLly9fXmxZv3796NevX1WEJYQQJisxIxmVQomT\nda1i6zztPTgadwp1bgZ2FrZ33cf1Srq7nqH9uUTZyCTJQghhohIyi4/RL+Rp787RuIJ2/aYuDe+6\nD/0tde3uL+lrtDqir6dy6lIypy4mcfpSMo3rOjL75c73tV9RlCR9IYQwQYVj9Fu5Nytxvddtnfnu\nnfTjsbe0w87y7rUBJdFodVyOTeXkxSROXUzm9OVkMrL+mwzI3cmaNk2lE3dFk6QvhBAmKCnzFlC8\n534hQ26xm6/JJyEj+Z4XBXdSZ+Xx/dYz7D4SQ2Z2vn55bRcbOrX2pHVjF1o3dsXD2cbgfQrDSdIX\nQggTdOctde/kacAtdhMyktDqtAa354efvM7X609wMy0HNydrgv3rFCT5Rq64OVmX8RmI8pCkL4QQ\nJigho2A+lDt77hdytnbEUmVxz7H6hZ34Suu5fzMtm282nGD/iTjMVEqG92/OE92bYm4mN3qtapL0\nhRDCBCXoJ+ZxLnG9QqHA096duPQEtDotSkXxBH29lDH6Op2O3w9dZdnm02Rk5dGyoTNjn2pDPQ8Z\nhm0skvSFEMIE3W02vtt52nsQnRLDzawUXG2KXxzcq+f+9SQ1i389zokLSVhbmvHqk37069gApVKG\n4RmTJH0hhDBBiRk3USmUOFs53nWb23vwl5z041GgoLbdf73sNRot+86ks/uXv8jN19K+ZW1efdIP\nV0dps68OJOkLIYQJSsxIxtXGGaXy7u3qhdX2cenx+Ho0L7a+4GLAiewc2H8ihojIeCKiEkjPzMXR\nzpI3H/cl2N9LJtmpRiTpCyGEicnV5HErO5XW7j733K6wpH89rWgPfp1OR+SVBG5lp2KVU5sRM8LQ\n/nuDVJdaVnRoZscbw7viYGtRKfGL8pOkL4QQJiaplOF6hfQlfXUCOp2OUxeT+SviGhFR8dzKT8Cq\nNWSkWNC8gTNBLTwIauFBA08Hjhw5Igm/mpKkL4QQJiYh4yZw7058ALYWNjhY2nMxMZY3PttFdFwa\nAA62FrRuacUFYESvdgxq1bWyQxYVRJK+EEKYGEN67ienZrF1fzTpN83R2twkMSGFrm3q8UiXhjRv\n4Mz6M1u4cBoaOHtVVdiiAkjSF0IIE5OYeffq/bNXbhK65xL7jl9Ho9Vh08QOhe1NPng9AN96DfTb\nxekn5qnYu+uJyiVJXwghTExCCSX9kxeTWLnlDGevFMzJ713bnke7NkJtZ8nPp6+SrUwtso+49ATM\nlWYlDuUT1ZckfSGEMDGJGcmolCqcrGqRnZPPyq1n+G3vZRQKaNfSg8e6NsavqSsKhYJDMSnAvz34\n6xQ8XqfTcV0dT207t3sO+RPVjyR9IYQwMQkZybjZOBN15RYL1hwlLimDuu52jH82kGbeTkW29XIo\nnKDnv2F7qTnpZOVl4+l+7zn3RfUjSV8IIUxIbn4uqdlpmCnrMmnxXgAe796EYf2aY2muKra9h21B\niT9O/d+Nd+JKmXNfVF+S9IUQwoT8c/EyAPE3oLaLLW8+E0DLhnfvxW+uMsfdxqXIBD36OfdLubue\nqH4k6QshhAnIy9fw046zrD+8HwsfaObpxcyB3bGyLD0NeDl4cDTuNBm5mdha2Nx2S10p6dc00gND\nCCEecFdvpPHWgr/59Y/z2DtpAHgkqJVBCR/+u4teYQm/tFvqiupLkr4QQjzAjkQl8M7CPUTHpdGv\nUwN6dXYFwN3u3rPx3a6wGr8w2celx2Nrbo2DpX3FBywqlSR9IYR4QG3df5lZSw+Ql6/l7WFtGTPY\nn1s5BePwS5uC93b/9eBPQKvVckOdiKe9h9w9rwaSNn0hhHjAaLQ6loWeInTPJWrZWTD1+Q60aFgw\niU5iRjJmSjMcrRwM3t/tt9hNzExGo9VI1X4NJUlfCCEeIJnZecz7IYLDkfHU87Bn+ugO1Hax1a9P\n/HeMvlJheEWvs7UjFipzrqfHS8/9Gk6SvhBCPCASbmUye+lBouPSCGjmxsTn2mFrba5fn5OfS2pO\nOvUd65Zpv0qFEk97D+LSE/Tt+tJzv2aSpC+EEA+Ac1dvMXvZQVLSc+jfuQEvD/JFpSpami+80U5Z\n2vMLedq7cyUlhtMJ5/79X0r6NZEkfSGEqOH2Hb/O/1ZHkK/R8n+PtWZg10YldrIrvKVuSXfXK01h\nyf7EjUgAPO3c7iNiYSyS9IUQohqLS8og/mYGt9JzuJWWzc20f3+nZ3MrLZtb6TlkZudjbali0sgO\ntGtZ+677SlCXv6TvZV+w3xxNLs7WjliZW5XvCQmjkqQvhBDVUGZ2Ht9uPMkf/1y76za17Cxwd7LB\nw9mGYf2a09Cr1j33WVi9X56S/u299aXnfs0lSV8IIaqZyMs3+Wx1BPE3M2lUpxYdW9XGycEKJ3tL\nnByscHawwtHeEjNV2aZaSci4vzb9//6W9vyaSpK+EEJUE/kaLWt+P8uvO8+hA57q1ZRnH26OuVnF\nzKOWmJGMudKMWlZln0nPzsIWB0s70nLU0nO/BpOkL4QQ1UBsoprPfozg/LUU3J2seWtoW1o1KnuJ\n/F4SM5JxtS3bGP3bedp7kJajlpJ+DSZJXwghjEin07H9wBWWhJ4iJ1dDj7Z1eflxvyLj6ytCdn4O\naTlqGjp5l3sfDR3rcT75Mt61vCowMlGVjJr0MzIymDhxIqmpqeTl5TFmzBjc3NyYOXMmAD4+Psya\nNcuYIQohRKVJVeew8JdjHDx9A1trc8YND6BrQJ1KOVbifbTnF3rG91G6N+x0X/sQxmXUpL9hwwYa\nNmzIhAkTiI+PZ+TIkbi5uTFlyhT8/PwYN24cu3fvplu3bsYMUwghKlz4yTi+XHeclPQc/Jq4Mv7Z\nQFwdrSvtePczRr+QjYU1jZzLX1MgjM+oSd/JyYmzZ88CkJaWhqOjI7Gxsfj5+QHQq1cvwsPDJekL\nIR4Yqeocvtlwkj3HYjE3U/LCgFYM6tYYpbJy71j3X89950o9jqjejJr0H3nkEdavX0+fPn1IS0vj\nq6++4v3339evd3NzIzEx0YgRCiFExdDpdOw9fp1vNpwgVZ2LT30nxg0JoJ5H1dyTXl+9byNV86bM\nqEl/06ZNeHl5sXTpUqKionjjjTewsbHRr9fpdAbvKyIiojJCFLeRc1w15DxXvqo+x+lZGrYeTiHy\nWhZmKng4oBYdfWxIiDlHQkzVxHAu7iIAcRdjSb9yq9KPJ+/j6smoSf/IkSMEBwcD0Lx5czIzM8nM\nzNSvj4+Px93dsPGgbdu2rZQYRYGIiAg5x1VAznPlq8pzrNPp2HUkhu+2nyQ9M49WjVx44+k2eLnZ\nVcnxb7d2x++YZ5vzUPvgEuflr0jyPq585b2oqpgZH8qpfv36HD9+HIDY2FhsbW1p1qwZhw8fBmDH\njh107drVmCEKIUS5JKdmMXvZQf63+gh5+VpeftyXj17tYpSED5CQkYS7jUulJ3xRvRm1pD9kyBCm\nTJnC8OHDyc/PZ+bMmbi5uTF9+nS0Wi3+/v507tzZmCEKIUzIjeQMVoVFkngrC6VSgarwR6VEqVCg\nUikKlisU5Gm05ORpyMnVFPmdm6shJy+f7FwNOh34NXHl9afbUNvF1mjPKysvm/TcDBo71zdaDKJ6\nMGrSt7W15fPPPy+2fPXq1UaIRghhqjQaLaF7LvHj9ihycjUoFaA1vEsRlhYqLM1VWFqosLMxx8XC\nCisLM7oH1qVvx/pGL11XxBh98WCQGfmEECbtQkwKC385xqXYVGrZWTD2qTZ0+3eCHK1Wh1anQ6PR\noSnytxZzs4Ikb2GmNGpSz9fkc/j6CQAszSywVFliZWaBpZnlv/9bEKdOACTpC0n6QggTlZ2Tz4/b\nowj9+yJaHfRqV49RA1vjYGuh30alUqACzKvxN+Vfl8P5LsKw2tH7mZhHPBiq8VtZCCEqx5GoBBav\nO07CzUw8XWwZM9gf/2Zuxg6rXI7HnwEKpshVKpRk5+eQk59LTn4O2ZqC37maXMyV5vh5tDBytMLY\nJOkLIUxGSnoO6/Ylc/JKDEqlgsE9m/LMwz5YmquMHVq5aHVaziScx8XGicdb9DN63wFR/UnSF0KY\nhNOXkpmz8h9S1Dk0refI60+3oaFXLWOHdV+uplxHnZtBoFdrSfjCIJL0hRAPvLD9l/lmw0mgYDa8\n14Y+hKqS57qvCmcSzwHQ2t3HyJGImsLgpK/ValEqlfq/o6Ki8PT0xMnJqdKCE0KI+5GXr+XbjSfZ\nFh6Ng60Fk55rR27qlQci4QOcSihI+q3cmxk5ElFTGDQj34EDB+jevTsA+fn5DB06lCeeeIJu3bqx\ne/fuyoxPCCHK5VZ6Nu99vY9t4dE09HLgf292w7eJq7HDqjBarZbIhHO427rIUDxhMINK+vPmzeP1\n118HYMuWLcTExPDnn39y7NgxvvjiC7n1rRCiWrlwLYUPlx8kKTWbYH8vxg0JwMrywWrNvJIaS0Ze\nFu3qtjF2KKIGMaikf/nyZQYPHgzArl27CAkJwcvLi/79+xMdHV2Z8QkhRJnsOhLDxEV7SE7L5rmQ\nFrw7IqhCE75Gq2HVsXXsv2rcu8idTjgLSHu+KBuDPglWVlakpaVhaWnJ/v37WbBgAQBqtVp6jAoh\nqgWNVsfKLWfYsOsCNlZmTBrZjnYta1f4cU4nnGPz2Z0A3MpK4RGfXhV+DENIe74oD4OSfrdu3Rg5\nciQqlQonJyc6duxITk4OH374odw+UQhRpfI1WhJvZXEjOYMbyRnEJWdyIzmDK3FpXE/KoI6bHe+N\nak9dd/tKOf6Ba0cAsDazYuWxtWTl5/Bky/5VWgDSaDVEJp6ntp0bLjbSmVoYzqCkP2PGDFasWEF6\nejpDhw5FoVCg1WpJTEzko48+quwYhRAmTKPVsWXfJf45E8+N5AwSbmWhLeFuOFYWKoL9vRj7VBts\nrc0rKRYNh2KPUcvKgfd7TuCD3V/wy6nNZOVlMdz/iSpL/NEpMWTlZdOpnhS6RNkYlPSXLFnC2LFj\niyyztrZm6dKllRKUEEIAJNzMZP6aI5y6WHCXOEd7S3y8najtYoOniy0eLrZ4uthS29UGRzvLSk+6\nkYkXSMtR83Djh/C0dy9I/Lu+YPPZnWTl5/Bi4DP6oc2V6b/2fKnaF2VjUNL/5ZdfGDp0KM7OzpUd\njxBCoNPp2H0khq/WnyAzO59Ovp68+qQfTvZWRo3rQExB1X7HegEAuNg4MbPneD7cvZCdF/eQnZfN\nax1GYqas3Gl9T+vb86UTnygbg5L+qFGjGDt2LCEhIXh6emJmVvRhMmRPCFFR1Jm5fLXuBH8fi8Xa\nUsW4IW3o1c7b6J2GtVoth2KOYW9pRwu3pvrltawcmNFjPB//vZi9V/8hW5PLm51GY6GqnCaGfK2G\nyMQLeNl74GRds6cRFlXPoKQ/Z84cAI4cOVJsnUKhIDIysmKjEkKYpOPnE1nw0xGSUrNpXt+Jt4a2\nxdPV1thhAXA2+SIp2Wn0ahSM6o6SvK2FDe91e515+77mcOxx5u75kneCX8HKzLLC47h86yrZ+TnS\na1+Ui0FJPyoqqrLjEEKYsLx8Dd9vjWTj7osolQqG9WvOUz2bolJVfvu4oQ5cOwr8V7V/JytzKyZ2\nHcOC8KUcjj3Oh7u+oE+Th1DnZhT85GSSnqtGnZuJOqdgWbYml9GBQ+hYL9DgOE7LUD1xHwyesUKn\n03HmzBni4uLIzc2lQYMGtGzZsjJjE0KYgKs30pj3QwTRcWl4udoyYVhbmnlXr2FoWp2WgzFHsbWw\nuWc7uoXKnLc6/x9fHlzJ3qv/cDb5UonbmSvNsLO0JT1HzU8nNtG+ThuDOwAWduJrKUlflINBSf/C\nhQu88sorxMTEYGtbUNWWkZGBj48PS5Yswc3NrVKDFEI8mGIT1Uz+ch9pGbn079SAUQNbVcvpci8k\nR3MzK4XuDTqV2knPTKlibIfnCfTyJTs/GzsLW/2PvWXBb0szCwC++edH/ri0lwMxR+nsXfrwu3xN\nPlGJF6nr4ImjlUOFPDdhWgz6dH388ce0a9eO1atX4+7uDkB8fDzz5s3jgw8+4PPPP6/UIIUQD55b\nadlM/zactIxcXhvsT/9ODYwd0l0diLl31f6dlEolwfXblbrdY8378OflfWyM3EaneoGldla8eOsK\nOZpcqdoX5WZQfdKZM2eYMWOGPuEDeHh4MHPmTA4fPlxpwQkhHkyZ2XnM/O4ACTczGfqwT7VO+Dqd\njoPXjmBtboWvR/MK3Xdte3c61Q0kOiWG4zfOlLq9tOeL+2VQ0jc3NyczM7PY8ry8PKMPoxFC1Cx5\n+Vo+WnGIS9dT6duxPs88XL3Hml+6dZXEzJsEeflhXgnD8Aa16AvAhsjtpW4r7fnifhmU9Lt06cKb\nb77J0aNHSUtLIz09naNHjzJ+/HjatSu9CksIIQC0Wh0L1hzh+PkkOrSqzatP+FX7gkPhXPtl6WFf\nFg2c6hHg2YrIxPNEJV6863Z5mjyiki7hXasODpZ2lRKLePAZlPSnTJmCo6MjQ4cOpUOHDrRv355h\nw4bh6OjItGnTKjtGIcQDYvlvp/n7aCwtGjjzzoigajUkryQ6nY4DMUexMrPE36NFpR3n8Rb9ANgY\nue2u21y4GU2eJk+q9sV9Magjn729PV988QVpaWnExsYCULduXeztK+cuVkKIB8+GXRfYuPsi9Tzs\nmDa6A5bmlTtVbUW4khJDvDqRzt5BWPzb474yNHdrQnPXxhyJO8WVlBjqO9Ytto2054uKYNBldt++\nBW1ODg4OtGjRghYtWkjCF0IYbFfENZZtPo2zgxUz/68T9jaVl0Arkn6u/bqG9dq/H4P0pf2S2/ZP\nJ5xDgYKWt00BLERZGZT0PT09+euvvyo7FiHEA+jI2QQWrDmKrZUZs17qhLuTjbFDMohOpyP82hEs\nVRYEeLau9OMFeLaivmNd9l+L4IY6sci6XE0e55IuUd+xDnaW1WNaYlEzGVS97+npyeTJk/Hy8sLL\nywuVqmi1nIzTF8L03EzL5khUAhqtDp2u4Eer49/fOnS6gp76v+w8i1KpYOqoDjTwrDkTylxLvU5c\negId6wbqJ9OpTAqFgkEtHubz8GWERv3OS0FD9evOJ18mT5svd9UT983gqa969OhRmXEIIWoInU7H\n74eusjT0FJnZ+aVur1DAxOfa4dvYtQqiqzhlnZCnInSsG8gau83suhzO4FYhOFs7Av8N1ZP2fHG/\nDEr6Y8aMoW7d4h1LhBCmJf5mJot+Ocax84nYWJkx8pGWuNSyQqFQoFTw728FCv3fUNvVlvq1a04J\nv9DBa0cwV5lXSdV+IZVSxWPNH+bbwz+y5ewfjGjzJPBve75CQQu3JlUWi3gwGZT0H330UQ4fPmzw\nDSGEEA8WrVZHWHg0K7ecJitHQ1ALD8YM9sfV0drYoVWKmLQ4rqXF0a6OP9bmVlV67G4NOvDr6d/4\n/eIeHm/ZD3OlOeeSL9PQsR62FjWjP4SovgzK4sOGDePzzz9HrVZXdjxCiGrmepKaKV/t4+v1J1Ap\nlYx/NpDpozs8sAkf4OC/t9HtUAW99u9krjJnQLPeZOfnsO38bs4lX0Kj1UjVvqgQBpX0d+7cSVJS\nEt999x12dnbFOvKFh4dXSnBCCOPRaHVs3nOJVWGR5OZp6Ni6Nq8+6Y+zQ9WWfI3hQMxRVEoVQV5+\nRjl+78bBrI8MI+zcn6hzMwCkE5+oEAYl/Zdeeqmy4xBCVBM307I5fSmZ0L8vEnXlFg62Frw5JIDg\nNl7VfsrcihCXnsCVlBgCPVtjY2Gc2gxrcyv6N+3O2tNb2XZ+F0qFkuZujY0Si3iwGJT0H3/88buu\nS01Nva8AQkNDWbJkCWZmZowbN45mzZrx7rvvotFocHNzY968eVhY1IyJPISoaXQ6HdeTMjh9KZkz\nl5M5c+kmcckZ+vVd29Th5cd9qWVnacQoq9ZBfa/9yplr31D9m/Zgc9ROcjS5NHFugI35g9ucIqrO\nPZP+0KFDWb16tf7/jRs3MmjQoCLbPPTQQxw/frxcB7916xaLFy9m3bp1ZGZmsnDhQrZt28bQoUPp\n378/n3zyCWvXrmXo0KGl70wIYZD0zFz+irj2b6K/SUp6jn6drbU5QS08aNnQGf+mbjTzdjJipMZx\n4NoRVAql0ar2C9lb2tG7cVe2nPtD2vNFhbln0j99+nSR/2fMmFEs6et0unIfPDw8nE6dOmFnZ4ed\nnR2zZ8+mZ8+ezJo1C4BevXqxYsUKSfpCVACNVseOg1dYtTWS9MxcAJwdrOjapg6tGjrTspEL9Ws7\noFQ++FX4dxOXnsClW1fxr92yWsx890TLfmi0Gvo27WbsUMQDwuDJeaDkBH8/bXwxMTHodDrefPNN\nEhISeP3118nKytJX50KmOV4AACAASURBVLu5uZGYmFjKXoQQpTlzOZlvNpzkUmwq1pYqRj7SkmB/\nLzycbUyind5Qu6MPAPBQ/Q5GjqSAvaUdo9oOMXYY4gFSpqRfGV8O8fHxLFq0iOvXr/Pcc88VOUZZ\nahEiIiIqPDZRlJzjqlGR5zktU8Pvx1I5GZ0JgH9DG3q3qYW9dRqx0WnERlfYoWqUks6xTqdj55U9\nWCjMMU/UEZEs7/f7Id8X1VOZkn5Fc3FxISAgADMzM7y9vbG1tUWlUpGdnY2VlRXx8fG4u7sbtK+2\nbdtWcrSmLSIiQs5xFaio85yXr2HT35f4+fezZOdqaFy3Fi8P8qNFQ+cKiLJmu9s5PhV/lrSLaro3\n7ETHdtWjpF9TyfdF5SvvRZVRp9gLDg7mwIEDaLVabt68SWZmJp07d2b79oJbS+7YsYOuXbsaM0Qh\napzDkfGMnfcXK7ecwcJcxdin/PlsXDdJ+KUorNrv3qCjkSMRovLcs6Sfm5vL4MGD7/o/QF5eXrkP\n7uHhQd++fRk5ciRZWVm89957+Pr6MnHiRH7++We8vLyKdRwUQpQsKyefr9ef4M/D11AqFQwIbsiw\nvs2xqyH3rjem7LxsDsQcxc3WheYyv714gN0z6Y8ZM6bI/927dy+2TUnLyuKZZ57hmWeeKbJs+fLl\n97VPIUzNpdhUPln1D7GJGTSp58i4IQE16ja2xnYw5hg5+Tl08+mFUiH3GBEPrnsm/bFjx1ZVHEKI\nctDpdGzZd5mloafJ12gZ1K0xz4W0xNxMEldZ/H3l3177UrUvHnBG7cgnhCi/tIxcvvj5KAdP38DB\n1oLxzwYS1MLD2GHVOEmZNzkVf47mro2pbedm7HCEqFSS9IWogU5fSubTHw6TlJqNXxNX3hoaiEst\nmaa1PP6OPogOHd2klC9MgCR9IWoQjVbHr3+c46ftUQAM79+cwT2boTLhWfTuh06nY3f0AcxV5nSq\nJ0PMxINPkr4QNcS5q7dY8dsZTl5MwtXRmreHtaVVIxdjh1WjnU++TFx6Ap29g4x2Rz0hqtJ9J/3+\n/fsTFhZWEbEIIe6g0WgJPxVH6N+XiIy+CUDH1rV5Y0gA9jIU777J2Hxhau476cfGxlZEHEKI26gz\nc9lx8Aqb914mKSULgKAWHgzs2oiAZm4yX34FyNPksf/qYZysauHn0cLY4QhRJe6Z9CdPnlzqDjQa\nTYUF8//t3Xdc1XX///HHYSsgQ5ZMURQXCCo4cO/cloWaltllaqnVdZX9tKFdZZltbWia1tcstbJl\n7m2KCwERRRCVJXvvdT6/PyyuTMUFfDic1/2Wt+B8xnmdt+DzfN7n/Xm/hdB3GXkVfPZjBPtOJVJW\nXoWpiSEjgzwZ1dsTVwdLtctrVEKvRlJUUcKg1r0xMJBbHIV+qDH09+3bh4eHB05OTvVVjxB66fLV\nPP5v23lOnU8DwN6mCaOGtmJod3eZUa+OHPiza19G7Qt9UmPo//e//+Wzzz7jvffeq17u9p86d+5c\nJ4UJoQ8Ki8vZsCOabUcvo1XAzd6ER0d0pkdHJwwN5eqzruSW5hOeEkUrG3fcrJzVLkeIelNj6A8b\nNozTp0/z9ddfM2PGjJvuczfL3wohrqnSKuw5Ec//bTtPflE5Lvbm/GusD5riJLr6SgjVtT/iT6JV\ntPRtKavpCf1y24F8t/tcf8eOHbVWjBD6IPpKNqt+OsPFpDyamBoybWQHxvRtjbGRAaGhSWqXpxcO\nXjmGocaA3u4BapciRL2679H78fHxODvLlYkQt5OTX8pXv59j36lEAPp3dWXayA4yk149Sy/LIj43\niW4unWlmJoMjhX6579CfNWsWERERtVGLEI1SaXkl245cZuPuGErKKmnlbMXMB33o4CkT66jhbEEs\nIPfmC/1036Evn+kLcXOFJRX8fuQSvx66RH5ROZZNjXl6QmeGdveQaXNVUqWt4lxBHJYm5nRp0Unt\ncoSod/cd+jJJiBDXyyko5ZeDcWw7eoWSskrMmxgTPKQtY/u2lln0VBaReo6iqhKGe/bHyFBmIRf6\nR37qhagladnFbNkfy+4TCVRUarG2NGXikLYM79mSpmbGapcngAOX/7w331O69oV+qjH0N2zYcNsT\nyIx8Qt9dSclny/5YDoYlo9UqONg2ZcIALwYFuGNibKh2eY3CpewECsoL8XVsf0+9i8XlJawL28yx\npNPYmdjQysa9DqoUouGrMfS//PLL257AwcGh1ooRQhdUaRWir2RzIiqV41EpJGcUAeDuZMnDA9vQ\nx89FJtapRTGZl/jvgY8or6qgk4M30/wfxt3a5Y6PP5cew6fHvyajOJtWNu4MsuwuH0sKvXXbaXiF\nEFBSVkl4TDrHo1I5eS6N/KJyAExNDOnp04KB3dwI7OCEgQzQq1VJeSm8ffhTKrVVtLdvw9n0C8zf\n9RZDvfrySKdRWJiY3/LY8qoKNkX+ytYLe0EDD3UYwUMdRxARFl6Pr0CIhkU+0xfiFhRF4WBYMgdP\nJxERm0FFpRYA22amDOvhQfeOTvi2scdUuvDrRFZxDksOrqCovJinAx+jv2dPTl+N5Kuw79kRe4Aj\n8SeZ5DuWgZ5BNyyYcyUniRXH15GYdxUnC3vmdJ9GW7tWKr0SIRoOCX0hbiKnoJTlm8KrF8Bp2aIZ\ngR2d6N7RCS9Xa7mir2OF5UW8dXAFWSU5TPYdR3/PngB0cfbBx7Ed22L28+O5bXxx6lt2XzzME12C\naWffGq1Wy68XdrPp7G9UaasY0roPU/0ewszIVOVXJETDIKEvxD+cOp/GxxvDyC0sw6+tPbMf8sXZ\nzkLtsvRGeWU57xz+nMT8FEa0GcDYdkOv225saMzY9kPp27I7G878xKErx3lt33sEuXcjqziH6Mw4\nrM2aMTtwKv5yL74Q15HQF+JPZRVVrPstit+PXMbI0IAnx3RiTJ9WclVfj6q0VXwU8iUXMuPo5d6N\nx/wn3HLQnU0TK+Z0n8bQ1n1Zd3ozRxJOAdDd1Z8Z3SbTzFTeqAnxTxL6QnBtPft3vwklMa0AdydL\nXni0K57OVmqXpVcURWF16HecunoGH0dvngl8DAPN7e+CaGvXiiVD5nM04RRGBkZ0d/WX0flC3IKE\nvtBrWq3Cr4fj+Pr381RWaRnV25NpozrK4DwVbDr7G/suHcHTxo3/BM3E2PDOJzQy0BjQ2yOwDqsT\nonGQ0BeNUpVWIa+wrHptCEX58w8Kf/5HaVkla345S3hsBtaWpjwb7E+39o7qFq6ndsQeYMu57Tha\n2LOg7xyaGsvKg0LUBQl90egUFJez8LMjXEnJv6P9Azo4Mu8Rf6wtZYR3fVAUhbyyAtILM0krzCQ+\nL5nfondjZWrJy/3mYm3WTO0ShWi0JPRFo1JRWcWSdSe4kpKPr5cd1pamaNBQ/RGvBjT8b6Eon9Z2\nDApwk8+A60h+aQFHE0NJK8wkrSjzWtAXZVJWWXbdfk2MzVjQdw5OFvYqVSqEfpDQF42Goiis2BxO\n1KUsgjo7M39KNxl5r6Lyqgpe3/8hifkp1Y+ZGZniZGGPo7kdjhbX/jiY29PKxo1mZpYqViuEfpDQ\nF43Gpj0x7A9NwtvdhucndZHAV9nGM7+QmJ9CX4/uDG/THwcLOyxNzKVXRQgVSeiLRuHg6SQ27IjG\nwbYpL08PlNH3KjubdoHfY/bRwtKBGd0mY2pkonZJQghAlgITOu/c5Sw+2hhGUzMjFj3ZHRtLM7VL\n0mvF5SV8euJrNBoNc7s/IYEvRAMioS90WkpmEUvWnUCrKPy/xwJwd5KR32pbG7aJrOIcHuwwHK/m\nLdUuRwjxNw0i9EtLSxk0aBBbtmwhJSWFqVOnMnnyZJ599lnKy8vVLk80UAXF5by+5hj5ReU8/ZAv\n/t4Oapek944nhXHoynFa23jwYIcRapcjhPiHBhH6n3/+OdbW1gAsX76cyZMn8+233+Li4sIPP/yg\ncnWiIaqo1PL2VydJzijkwf5eDOvRUu2S9F5uSR5fnNyAsaExc3pMw8hAxlUI0dCoHvpxcXFcvHiR\n/v37A3D8+HEGDRoEwKBBgwgJCVGxOtEQKYrCJ9+HExmXSU+fFjw+soPaJek9RVFYefIbCsqLeNR3\nHC7NnNQuSQhxE6qP3n/nnXd49dVX+fnnnwEoKSnBxOTawB97e3syMjLULE/Us+j4bPafSkSrXJsX\nX1EUtIry59fXHssvLic8JoM2btb8e7LcmtcQ7L10hNMpZ/FxbMfwNv3VLkcIcQuqhv7PP/+Mn58f\nbm5u1Y/9/R7ev+ZNvxOhoaG1Wpu4UV23cX5xFZ/+nkpZxe3/3ptbGjGmWxOiIiPqtCY16NrPck5F\nPusStmBqYELvJv6EnQ5Tu6Tb0rU21kXSxg2TqqF/4MABEhMTOXDgAKmpqZiYmNCkSRNKS0sxMzMj\nLS0NB4c7G5zVtWvXOq5Wv4WGhtZpGyuKwhtrj1NWofDEqI4EdHDEwODa9LkGGs21P399b6ChWVMT\nDA1V/3Sq1tV1O9c2rVbLon3vU6FUMq/7Ezqx0p2utbEukjaue/f6pkrV0P/oo4+qv16xYgUuLi6E\nhYWxc+dOxo4dy65du+jTp4+KFYr6cjAsmZPn0ujcxo7x/VvLrG064pfoXVzIukRPt64EuQeoXY4Q\n4jZU/0z/n+bOnctLL73Epk2bcHZ2Zty4cWqXJOpYTkEpX/x0BlMTQ+Y87CeB3wBoFS0pBemUVpZR\nXlVOeVUFFVUVlP/tT3FFCZujtmJjZsWMrpPk700IHdBgQn/u3LnVX69bt07FSkR9W/VTJAXFFcwY\n1wmn5uZql6PTckvy+CPhJANbBd3XmvTfn/2dH89tu+1+GjTMDpyKhan8vQmhCxpM6Av9dPTMVY5E\nXKV9S1tGBbVSuxydll2cy+sHPiSlIJ30wiymdw2+p/PklxWyNWYvVqaW9PEIxMTIGBNDE4wNjDEx\nvPbH+M//O1s64mrVopZfiRCirkjoC9UUFJfz+ZYzGBsZMC/YT269uw9ZxTm8vv9DUgszMDE0Zvel\nw4xuNxh78+Z3fa6tF/ZQVlnGJJ8xjGg7sA6qFUKopfENfxY6Y80vZ8ktKGPysHa4Osha6vcqszib\nxX8G/vj2w5nRdTJV2ip+jLp99/w/5ZcVsj32ADZmVgxu1bsOqhVCqElCX6ji1Pk09p1KxMvVivH9\nWqtdjs7KLMrm9X0fklaYwUMdRjDRZwx9PAJxaebEgSvHSClIv6vz/XWVP7b9UExkdTwhGh0JfVHv\niksr+PT7cAwNNMwL9m+U99vXh/SiLBbt/4C0okwmdBxJsM9oNBoNBgYGBHcajVbR8v3ZrXd8PrnK\nF6Lxk39tRb37aus5MvNKeWRwWzydrdQuRyelF2by+r4PyCjK4pFOo3ik06jrtge6+tHS2pUjCadI\nyE2+o3PKVb4QjZ+EvqhXkRcz2R5yBQ8nSx4e1FbtcnRSWmEGi/d/SEZxNhN9xjCh48gb9jHQGDDR\nZwwKCpvv4GpfrvKF0A8S+qLelJZVsnxzGAYamBfsj7GR/PjdrdTCDBbv+5DM4mwm+47jwQ4P3HJf\n/xadaNPckxPJ4VzKjq/xvHKVL4R+kH91RZ2qqNRyNi6Tb7af58UVh0nNKmZ8fy/autuoXZrOySrO\nYfG+D8gqyWFK5/GMaz+sxv01Gg2TfMYAsDHy11vuJ1f5QugPuU9f1CpFUUhKLyQsJp3wmAwiL2ZS\nWl4FgKGBhu4dnZg0rJ3KVeoeRVFYfepbsktymew7jjHtht7RcZ0c29HRoS3hqeeIzrhIO3uvG/b5\n+335cpUvROMmoS/uW1lFFaej0zl5LpWwC+lk5pVWb3Oxt8C/rT3+3g50at2cpmbGKlaqu44lneZ0\nylk6OXgz9g4D/y8Tfcbw6t732Bj5K4sGPH/dHPlylS+EfpHQF/ektLyS0Oh0jkZc5eT5VErKrl3N\nWzY1oY+fC35t7fFra4+DTVOVK9V9ReXFrDu9GWMDI2Z0m3zXC9t427XGv0UnwlLOEpkWja9T++pt\ncpUvhH6R0Bd3rKSsklPn0zgScZVT0WmU/dlt79S8KSN6OdPL1xkvV2uZTreWbTjzM7ml+Uz0GUML\nS4d7Okdwp9GEpZxlY+Sv+Di2Q6PRyFW+EHpIQl/cVmJaARsPZXJp83bKK7UAONuZE9TZmd6dXfB0\nbibLqtaR6IyL7Ik7jJuVM2O8h9zzeVrZutPd1Z/jSWGEXo2km4uvXOULoYck9EWNkjMKWfjZEXIL\ny3BztCDI14Wgzs54OFlK0NexiqoKVp3agAYNM7s9ipHh/f26PtJpFCeSwtkU+SttmreUq3wh9JCE\nvriltOxiXvn8WuCP6GbN7En91C5JZ1VUVWBseHeDGH+J3kVyfirDvPrR1u7+lx12s3Kmt0cAh+NP\n8PahT+UqXwg9JPfpi5vKyivhlZVHyMwr5YlRHQhsa6F2STorITeZf/08nzcOfExOSd4dHXM1P5Ut\n53Zg08SKSb5ja62WhzuOxEBjwKWcBLnKF0IPSeg3YrkFZXy36wJJ6QV3dVxeYRmvrjpKalYxE4d4\n8+CANnVUYeOnKAprQr+jpLKUyLRoXtz5JmEpZ2s8RqtoWXXqWyq1lTzZZSJNjZvUWj1Olg4M8OwF\nILPvCaGHpHu/kSqvqOLNtce5kJDD5j0XGN/fi0cGtcXMtOa/8sKSCl5bFUJiWiHj+rVm8jDveqq4\ncTp05TjRmXEEuHSmk4M36yO28PahTxnZdhCTfcfetMv/wOUQzmfEEuDSmUBXv1qv6XG/h+jk2Jae\nrl1r/dxCiIZNrvQbIUVRWL4pnAsJOXTxdsCmmRnf741l9rJ9HDlzFUVRbnpcSVkli1eHcOlqHsN7\ntmT66I4yWO8+FJUX803EFkwMjXnC/xEeaDuAtwbPx9nSkd9j9vLK3ne5WpB2/TGVxawP/5EmRmZM\n7xJcJ3WZGZsR5B6AgYH8+guhb+S3vhHavDeGg2FJtPOw4eUnAvnsxYE8PKgNuQWlLP36JIu+CCE5\no/C6Y8r+6hmIz6F/V1dmP+grgX+fNkX+Rl5ZAQ91GIGduS0ALW3cWDp0AQM8e3E5J5GXdr3NwcvH\nqo/Zm3mcoooSJvmOpXlTWZ9ACFG7JPQbmaNnrvLN9mjsbZqw8IlATIwNMTM14rERHfjkxYH4t7Un\nLCaDOe/u4/+2naO0rJKKSi1Lvz7JmYuZ9PRpwXPB/jLBzn26lJ3AzriDOFs6Mtp78HXbzIxMmR04\nlXk9pmOg0fDpia9ZcWwdRxNCOV8YRxvblgxt3VelyoUQjZl8pt+IXEzK5YPvTmNmYsir07tjY2l2\n3XYXewtef6onRyNTWPPLWb7fG8v+0CRc7S0Ij82gazsHXpzSDUNDeS94P7SKli9Pb0RRFKZ3Cb7l\n/fW9PQJo07wly0PWcjj+BIfjT2CAhqcCHpWudyFEnZB/WRqJ7PxS3lx7nPKKKl54tCuezlY33U+j\n0RDk68zn8//X5R8em4FPazsWTAuUNe5rwYHLIcRmXaanW9fr5rm/GUcLe14f9ALj2g9Dg4aetv54\nWLvWU6VCCH0jV/qNQFlFFUvWHScrr5RpIzvQvVOL2x7zV5f/wG5unDqfztDu7pgaG9ZDtY1bYVkR\nGyJ+wtTIlMf9JtzRMUYGhkz2Hce49sM4f+ZcHVcohNBnEvo6TlEUlm8MIyYhl4Hd3HhwwI3rpdfE\n1cESVwfLOqpO/3wb+QsF5UVM6fwgtk2t7+rY2rwfXwghbkZCX8dt2hPDofBk2re0Zc7DnWXEPZBT\nkseKY+tIyEvG0cIeJwv76v87WdjjZOmApYl5rbfVxawr7I37A9dmLRjRdmCtnlsIIWqDhL4OOxJx\nlQ07onGwacLCaYEYG0n3fEJuMm8f/pSs4hyaN7HhUnY8sVmXb9ivibEZThb2BLr4Ma79MAwN7q/t\ntFotX4ZuREHhya4TMbrP8wkhRF2Q0NdR0Vey+eC70zQxNeTVJ3tgbWmqdkmqC0+J4sOjayipLGWS\nz1jGtR+GVtGSWZxNWmEmqYXppBZkkFqUSVpBOkn5qVzO+Y0zadE823M6tk3urjv+7/Zc+oO4nHh6\newTS0aFtLb4qIYSoPRL6OuhiYi6LVodQWaXlpccCadmimdolqW7XxYOsPb0ZQ40Bz/V8kl7u3QAw\n1Bji+Gf3vi/Xj6QvKi9m5clvOJ4UxvydS5jb4wk6O3W46+fOLy3gu8hfaGJsxmOdH6yV1yOEEHVB\n7s/SMZev5vHaF0cpLavkP5O7ENjBSe2SVKXVavk67AfWhG7EwqQpiwY8Xx34t2Nu0pR/95rB9C7B\nFFWU8NbBT9gY+StV2qo7fv4qbRX/F/EjReXFBHcajXWTm98qKYQQDYFc6euQxLQCXl11lILiCp6b\n6E9ff/2+n7u0sozlIWs5dfUMLpZO/L++T+NoYX9X59BoNAxv0582zT358OhqtpzbTnTGRebdprs/\nITeZg1eOcTj+BLml+XhYuTDMq9/9viQhhKhTEvo64mpmIa+sPEJeYTlPT+jMoAB3tUtSVXZJLu8c\n/ozLOYl0cvDmP0FPYW7S9J7P19rWg3eGLuTzE+s5kRzO/J1LmNdj+nWT6+SV5vNH/EkOXTnO5dxE\n4FpvwdDWfWtlMKAQQtQ1CX0dkJZdzMufHyU7v4wZYzvxQM+WapekGkVRuJB5iY9DviSrJIeBnr34\nV7fJtTJa3tykKf8JeortsftZH7GFJQdXML7DcFpau3LwyjHCU6KoUrQYagzo6uxDv5Y96Orsc9Pl\ncYUQoiGS0G/gMnNLePnzI2TmlvD4yA6M6dta7ZLqnaIoxOcmcTQxlJDE06QVZgAw2XccY9sNrdX7\n7TUaDSPaDqRt81Z8GLKGLee2V2/ztHajn2cPgty7YWUmgyeFELpH9dBftmwZoaGhVFZWMnPmTHx8\nfJg/fz5VVVXY29vz7rvvYmJionaZqsjJL+WVlUdIyy5m0lBvJgxso3ZJ9UZRFBLykglJDCUk4TQp\nhekAmBqZ0su9G4NbBdHJsV2dPb9X85YsG7qQH89tx0Cjoa9Hd9ytXers+YQQoj6oGvrHjh0jNjaW\nTZs2kZOTw/jx4+nZsyeTJ0/mgQceYNmyZfzwww9MnjxZzTJVkVdYxssrj5KcUcRDA7yYNNRb7ZLq\nRUZRFvsuHSUkMZSrBWkAmBqa0NOtKz3duuDfohOmRvXzJtDcpCmP+T1UL88lhBD1QdXQDwgIwNfX\nFwArKytKSko4fvw4r7/+OgCDBg3iq6++0rvQj03MYcXmcBLTChjTpxWPj+ygF9Pr/hF/ktWnvqWk\nshQTQ2N6uHahp/u1oDczksmHhBDifqka+oaGhjRtem3E9ffff0/fvn35448/qrvz7e3tycjIULPE\neqMoCmfjsti8N4bwmGuv+YGeLfnX2E6NPvBLK8tYd3oz+y8fxczIlBldJ9PHIwAzYzO1SxNCiEZF\n9c/0Afbs2cMPP/zA2rVrGTZsWPXjiqLc8TlCQ0ProrQ6pygKMVdLORxVQFJmOQCejqb06WiJp2MF\np0+fVrnC/6mLNs4oy+aX1H1kVeTiaNqcMY4Dsc1rStSZqFp/Ll2hqz/LukTauO5JGzdMqof+4cOH\nWblyJWvWrMHS0pImTZpQWlqKmZkZaWlpODg43NF5unbtWseV1q4qrcKRiGS+3xvLlZR8ALp3dOLh\nQW3w9rBVubrrpRSk8+Ox35jWdyIWpua1ck5FUdgdd5j14b9RUVXBiDYDeLTzeL2//S00NFTnfpZ1\njbRx3ZM2rnv3+qZK1dAvKChg2bJlfPXVV1hbX5v9rFevXuzcuZOxY8eya9cu+vTpo2aJtU5RFPae\nTGDz3lhSMosw0ED/Lq5MGNgGjwY4h35mUTav7/+Q7JJconbF8WyP6bSz97qvcxaVF7Pq5AaOJZ3G\nwsSc53s+STeXzrVUsRBCiFtRNfS3bdtGTk4Ozz33XPVjS5cu5ZVXXmHTpk04Ozszbtw4FSusXRWV\nWj75Ppx9pxIxMjRgeM+WPNjfixZ2tXP1XNsKy4pYcmgF2SW5tG7qxqWSJBbt/4BHOo5ifPvhGBjc\n/dINMX9OrJNRnE17ey/m9ZhO86Y2dVC9EEKIf1I19IODgwkODr7h8XXr1qlQTd0qKqng7a9PEBGb\nSVt3axY8HoiddZM6fc7i8hKOJobSw9X/rrvlyyvLeefwZyTnpzKq7SA6aj1p6t6M5SHr2HT2N86m\nX2BujyfueDna1IJ0dlw8yI7YAyiKwoSOI3iowwiZulYIIeqR6p/p64OMnBJeXxNCfGoB3Ts68cKU\nrpiZ1G3TF5eX8ObB5VzMvsJP57bzfK8ZeDVveUfHVmmr+CjkSy5kXSLIvRtT/B4k7HQY7e3b8O6w\nl/n85HpOJkfw4s4lPBP4GF2cfW56Hq1Wy+mUs+y6eJDw1HMANG9iwzPdH6eTo37MOyCEEA2JhH4d\nu5Scx+trjpGdX8qo3p78a6wPhgZ1ewtecUUJSw6t4GL2FbxsWxKXHc9r+97ncb8JDPXqW+MtgIqi\n8GXoRk5dPYOPozfPBD6OgeZ/3fgWpua8EDSTnRcPsj78R5Ye/owRbQfyqO+46kF4+WWF7L90lF1x\nh8goygLA2641w7z60cPVHyND+bETQgg1yL++deh0dDpL/+8EpeVVPDmmE2P7tqrze+5LKkp5+9Cn\nxGZdpo9HIM8EPk5kejTLQ9by5emNXMiM46luk295D/wPUb+z59IftLR25T9BM28a0H8tR9vOzouP\nQtawLWYf5zNiebjjKI4nhXE04RQV2kpMDU0Y1Ko3w7z60dJGv5cBFkKIhkBCv47sOh7Ppz9EYGig\n4aWpAQR1dq7z5yytLGPp4U+5kBlHkHu3a1fpBgZ0durAO8MW8uHRNfyRcJIruUn8O2gGrs1aXHf8\nnrjDfB/1Ow7mzVnYdw5NjWsec9DSxpWlQxdUT6yz7I/PAWhh4cBQr7709+x5X8vdCiGEqF0S+rVM\nURS+2RHN5j0xYYRt/AAAFlFJREFUWDY14dXp3WnvWff33Zf9OfDufMZFerh1YU73adeNrrdrasvr\nA/7NNxFb2Ba7nwW732FWwKMEuQcAcDI5gtWh32FpasHCfnOxbmJ1R89rZmTK7MCpdHbqwOmUSPp4\nBOLj2O66jwSEEEI0DBL6taiiUsvyzWEcCE2iRXNzFs/ogbO9RZ0/b3llOcv++Iyo9BgCXf2Y12P6\nTUfFGxkaMa3LI7S1a83Kk+v5OGQt0RlxdHf156OQLzExMGZBn2dwtnS86xp6uXell7tMxiGEEA2Z\nhH4tKS6tYOnXJwmLycDbw4ZXp3fHyqLuF4kpr6rg3SMriUy7QDeXzjzX40mMbnMbXC/3rrS0duH9\nI1+w8+JBdl48iIHGgBf6zL7jEf5CCCF0j/TB1oLcgmvL4IbFZBDQwZE3Z/Wql8CvqKrgvT9WEpF6\nni7OPvy757/ueGS8czMnlgx5ib4tu2OoMWBWwBT8W3Sq44qFEEKoSa7071NqVhGvfRFCSmYRQwLd\neWZCZwwN6/a9VJW2ivjcJDad3Up46jn8W3TiP71m3PWtcGZGpszpPo2nuk7GpJ7WqBdCCKEeCf37\ncCk5j0WrQ8gtKOORwW2ZMrxdndySV1pZRmzWZaIzLhKdGUdM1mXKKssA6OzUnv8EPXVfC9VI4Ash\nhH6Q0L9HEbEZLFl3gtLySmaO92FU71a1du680nyiM+OIzogjOvMil3MS0Sra6u0uzZxoZ+dFe3sv\nerp10fuV6YQQQtwZCf17cDg8mQ++vbbO/YtTutHHz+W+zpdRlMX5jIt//onlakFa9TZDA0O8bFvS\nzr417exa09auNc1M6/6OACGEEI2PhP5d2vrHJb74ORIzEyNemR6Ir5f9XR2vKArJBamcT7/I+cxr\nIZ9VnFO93czIlM5OHWhv70U7Oy+8bD2k+10IIUStkNC/Q1VVWr7ZEc0P+2KxtjRl8b960Nr19ivM\nKYpCamEGUekXOJseQ1R6DHml+dXbLU0tCHTxo529Fx3svfCwdpWV54QQQtQJCf07cDWzkA+/PU10\nfA4t7Mz571M9cWp+66Vq04uyiEq7QFR6DGfTL5Bdklu9zdqsGUHu3ejo0JZ29l64WDrV+Xz8Qggh\nBEjo10hRFHaEXOHL36IoK6+ir78Lsx/0xaLpzbvbk/JS+DjkS+Lzkqsfa2ZqQQ+3LnRyaEtHB2+c\nLR0l5IUQQqhCQv8WsvNLWb4pjNDodCyaGPPsFH/6+N96wF54ShQfhqyhpKKUrs4++Di2o5ODN65W\nLWQeeiGEEA2ChP5NHA5P5vMfIygorqCLtwPzgv1obnXzFecURWF77H6+Dv8BI40h83pMp7dHQD1X\nLIQQQtyehP7fFBaXs3JLJAfDkjA1MWT2Q7480LPlLbvjK7VVrA3dyJ5Lf2Bt1owXe8+iTXPPeq5a\nCCGEuDMS+ly7Wj99IZ0Vm8PJyivF292Gf0/uUuMKeYVlRbx/9Aui0mNoae3K/D6zsWta90voCiGE\nEPdK70M/Mi6Tb3dGczYuC0MDDVOGt2PCwDY1zp9/NT+VpYc/I7Uwg0AXP+b0mIaZUd0vsCOEEELc\nD70N/ahLWXy7M5ozFzMB6NbekakPtKeVi1WNx51JPc8HR1dTXFHC+PbDCfYZLQP1hBBC6AS9C/3z\nl7P5dmc04bEZAHRp58Dkod54e9TcNZ9bkseBK8fYGPkrBhoD5nSfRt+W3eujZCGEEKJW6E3oX4jP\n5tudFzh9IR0Av7b2PDqsHe1a3jzstVotcTnxnL56lrCUs1zKSQDAytSSF3rPxNuudb3VLoQQQtSG\nRh/6iqKwYnM4u09cC21fLzsmD2tHx1bNb9i3sLyIM6nnrwV9ahQFZYXAtUVvfBy98W/Rid7uAVg3\nqfkjACGEEKIhavShv+dEArtPJNDK2Yp/jetEe08bsoqzOZN6nvSiTNIKM0kryiStMIP43OTqJWxt\nzKwY6NkLf+dO+Di2o6nxze/TF0IIIXRFow799JxiVv9ylibOyTTzjWPV+T1khuZctzb9X4wNjWlt\n60GXFp3o4uxDS2tXmS5XCCFEo9JoQ19RFFZsCqfcIgET10guZINNEyvaNvfEwdwOBws7HM3tcLS4\n9rW1WTMZhS+EEKJRa7Shvz3kChFXL9Kkw1maGDdhyeD5uDRzUrssIYQQQjWN8tI2JbOItdtDMWsb\nBhqFZ3tOl8AXQgih9xpd6Gu1Ch9tOoXiEQrGpUz2HYd/i05qlyWEEEKortGF/i+H4ojV/oGhZS5B\n7t0Y026I2iUJIYQQDUKjCv3EtAK+ObkdI4ck3Ju5MitgqozAF0IIIf7UaEK/qkrL0i3bMXA7T1ND\nc/5f39mYGpmoXZYQQgjRYDSa0F+/N5R0yz8wAF7qNxM7c1nmVgghhPi7BnvL3ltvvUVERAQajYaF\nCxfi6+tb4/6/J3+PpmkFU3weob19m3qqUgghhNAdDTL0T5w4QXx8PJs2beLixYssWLCA77//vsZj\nNE0L8LPtxugOA+qpSiGEEEK3NMju/ZCQEAYPHgyAl5cX+fn5FBYW1nhMM5yYP/Dx+ihPCCGE0EkN\n8ko/MzOTjh07Vn/fvHlzMjIysLCwuOUxwS4DiAiPqI/y9FZoaKjaJegFaee6J21c96SNG6YGGfqK\notzw/e1uvRvSu29dlqT3QkND6dq1q9plNHrSznVP2rjuSRvXvXt9U9Ugu/cdHR3JzMys/j49PR07\nOzsVKxJCCCF0X4MM/aCgIHbu3AnAuXPncHBwqLFrXwghhBC31yC797t06ULHjh2ZOHEiGo2GRYsW\nqV2SEEIIofMaZOgDvPDCC2qXIIQQQjQqDbJ7XwghhBC1T0JfCCGE0BMS+kIIIYSekNAXQggh9ISE\nvhBCCKEnJPSFEEIIPSGhL4QQQugJCX0hhBBCT2iUf65uo4NkNSchhBD65l4WNWoUoS+EEEKI25Pu\nfSGEEEJPSOgLIYQQekJCXwghhNATEvpCCCGEnpDQF0IIIfSEToX+W2+9RXBwMBMnTuTMmTPXbTt6\n9CgTJkwgODiYTz/9VKUKG4ea2vnYsWM88sgjTJw4kQULFqDValWqUrfV1MZ/ef/995k6dWo9V9Z4\n1NTGKSkpTJo0iQkTJvDaa6+pVGHjUFM7b9iwgeDgYCZNmsSSJUtUqlD3xcTEMHjwYL755psbtt11\n9ik64vjx48pTTz2lKIqixMbGKhMmTLhu+wMPPKBcvXpVqaqqUoKDg5XY2Fg1ytR5t2vnIUOGKCkp\nKYqiKMrcuXOVAwcO1HuNuu52bfzX48HBwcqUKVPqu7xG4XZtPG/ePGXXrl2KoijK4sWLleTk5Hqv\nsTGoqZ0LCgqUAQMGKBUVFYqiKMoTTzyhhIWFqVKnLisqKlKmTJmivPLKK8r69etv2H632aczV/oh\nISEMHjwYAC8vL/Lz8yksLAQgMTERKysrWrRogYGBAf369SMkJETNcnVWTe0MsGXLFpycnACwtbUl\nJydHlTp12e3aGGDp0qU8//zzapTXKNTUxlqtltDQUAYOHAjAokWLcHZ2Vq1WXVZTOxsbG2NsbExx\ncTGVlZWUlJRgZWWlZrk6ycTEhNWrV+Pg4HDDtnvJPp0J/czMTGxsbKq/b968ORkZGQBkZGRga2tb\nvc3Ozq56m7g7NbUzgIWFBQDp6ekcPXqUfv361XuNuu52bbxlyxYCAwNxcXFRo7xGoaY2zs7OxsLC\nguXLlzNlyhTef/99FJmj7J7U1M6mpqY888wzDB48mIEDB+Ln54enp6dapeosIyMjzMzMbrrtXrJP\nZ0L/n7+UiqKg0Whuug2o3ibuTk3t/JesrCxmzZrFa6+9dt0vvLgzNbVxbm4uW7Zs4YknnlCjtEbj\ndv9epKWl8dBDD/H1119z7tw5Dh48qEaZOq+mdi4sLGTVqlXs2LGDPXv2EB4eTnR0tBplNlr3kn06\nE/qOjo5kZmZWf5+eno6dnd1Nt6WlpWFvb1/vNTYGNbUzXPtFnjFjBs8++yy9e/dWo0SdV1MbHzt2\njOzsbB599FHmzJlDVFQUb731llql6qya2tjGxoYWLVrg7u6OoaEhPXv2JDY2Vq1SdVpN7RwXF4eb\nmxu2traYmJjQrVs3zp49q1apjdK9ZJ/OhH5QUBA7d+4E4Ny5czg4OFR3Nbu6ulJYWEhSUhKVlZXs\n37+foKAgNcvVWTW1M1z7rPnxxx+Xbv37UFMbDx8+nG3btrF582Y++eQTOnbsyMKFC9UsVyfV1MZG\nRka4ublx5coVAKKioqTb+R7V1M4uLi7ExcVRWlqKoiicPXuWli1bqlht43Mv2adTC+689957nDp1\nCo1Gw6JFizh37hyWlpYMGTKEkydP8t577wEwdOhQnnzySZWr1V23aufevXsTEBCAv79/9b6jRo0i\nODhYxWp1U00/y39JSkpiwYIFrF+/XsVKdVdNbRwfH8+iRYsoKyujTZs2LF68GAMDnbkGalBqaueN\nGzeyZcsWDA0N8ff3Z/78+WqXq3POnj3LO++8Q3JyMkZGRjg6OjJw4EBcXV3vKft0KvSFEEIIce/k\nra0QQgihJyT0hRBCCD0hoS+EEELoCQl9IYQQQk9I6AshhBB6QkJfCKEThg0bxnfffXdf55g+fTrv\nv/9+LVUkhO6RW/aEqEUDBw4kLS2t+p5vExMT2rRpw9y5cxvkhFFJSUmcOXOGESNG1PtzHz9+nMce\ne4yxY8eybNmyG7bPmDGDQ4cOsXfvXlxdXeu9PiEaI7nSF6KWLViwgMjISCIjIzly5AgjR45k5syZ\nXLx4Ue3SbrBr1y527Nih2vNbW1uzf/9+iouLr3s8OzubCxcuqFSVEI2XhL4QdcjMzIypU6fi6enJ\n/v37ASgrK+PNN99kwIAB+Pn58eijj1ZPCQvg7e3NunXr6NOnDytWrADgyJEjjBs3Dj8/P0aPHn3d\nAjEnTpxg4sSJdOnShd69e/PFF19Ub1uxYgWzZs1izZo1BAUFERAQwDvvvAPAF198wbvvvsvu3bvx\n8fGhvLycnJwcnn/+eXr16kXXrl157LHHiIuLqz5fQkICDz74IL6+vkycOJHt27fj7e1NUVERACkp\nKcyePZsePXrQtWtXXnrppeptN2Nubk779u3ZvXv3dY///vvvN/SMDBw4kG+++QaAiIiI6tccGBjI\nc889R35+/m23TZ06tfr119Q2cO2Nx+OPP46vry+jR4/m8OHDeHt7ExMTc8vXI0RDJ6EvRD2oqqrC\nyMgIuDZtaWRkJN999x3Hjx8nICCAadOmUVFRUb3/zp072bJlC3PmzCEtLY05c+bw5JNPcvLkSWbO\nnMncuXNJTU0lNTWVmTNnMmHCBE6cOMFXX33Fxo0b2bhxY/W5wsPDKS8vZ//+/bz77rusXbuW6Oho\nnnrqKcaOHcuQIUOIjIzExMSEd999l8zMTHbv3s3Ro0ext7fn5Zdfrj7XCy+8gIuLCyEhIbz88st8\n9NFH1dsURWH27NnY29uzd+9edu/eTXZ2Nq+++mqNbTNy5Eh+/fXX6x777bffGD58+C2PmT9/Pr16\n9eLEiRPs3r2boqIiVq5cedtt/3SrtgF44403KCsr4+DBg3zyySd8/PHHNb4OIXSBhL4Qdai4uJj1\n69eTnJzM4MGD0Wq1/Pjjj8yaNQsnJydMTU2ZN28eRUVFHDt2rPq4Bx54AHt7ezQaDdu3b8fFxYXR\no0djbGzMqFGjWLp0KQYGBmzduhVPT08mTJiAkZERXl5eTJ06lZ9++qn6XIqiMHPmTExMTOjfvz9m\nZmZcunTppvUuXryYVatWYW5ujqmpKcOGDateGS0tLY2IiAieeuopzM3N8fHxYeTIkdXHRkZGcuHC\nBebPn4+5uTm2trY899xz7Nix44bu+7974IEHOH36NOnp6cC13oTk5OQax0Dk5+djZmaGkZERVlZW\nrFq1qnpe95q2/dOt2kar1bJnzx6mTZuGjY0NHh4eTJo06Zb1CKErjNQuQIjG5u23367uJjYzM8Pb\n25svv/wSNzc3MjIyKCoqYu7cudete63VaklNTa3+3sXFpfrrhISE674HqgfeJSQkcP78eXx8fKq3\nKYpy3XLIzs7OGBoaVn9vZmZGaWnpTWuPj49n6dKlREZGVgf1Xz0QaWlpN9TWvn376q8TExPRarX0\n7NnzhvOmp6ffcoW1Zs2a0bdvX7Zu3cr06dP59ddfGTlyZHXPyM38+9//5s033+Tnn3+md+/ejBo1\nCl9f39tu+6dbtU1ubi7l5eW3fK1C6CoJfSFq2YIFC5gyZcpNt5mZmQGwYcMGOnfufMtz/D2INBoN\nWq32lucLCgpizZo1tzzX399c1ESr1TJz5kz8/PzYtm0bdnZ27Nmzh2eeeea6/YyNjW96blNTU0xN\nTTlz5swdPd/fjR8/ng8//JDp06fz22+/8cEHH9S4/8MPP8zgwYPZt28fe/fuZeLEiSxcuJApU6bU\nuO2fbtU2f93U9PfXKqvwicZAfoqFqEeWlpbY2NjcMDI9KSnplse4ublx+fLl6x7buHEjcXFxeHh4\nEBsbe92bgqysrFteydckMzOT5ORkpk6dWt1TEBUVVb29efPmACQnJ1c/9tfn3wAeHh6UlZVdNyix\npKSErKys2z537969yczMZOvWrRgZGdGxY8ca98/OzsbGxoaHHnqIzz77jKeffppNmzbddtudsra2\nxtDQ8LrXev78+bs6hxANkYS+EPVs0qRJrFy5kpiYGCorK9m0aRNjx46tHmH+T6NGjSI9PZ0NGzZQ\nXl7Onj17ePvttzE1NWXUqFEUFhayYsUKSkpKuHr1KjNmzGDVqlV3VIupqSlXr14lPz8fW1tbmjZt\nWj24befOnZw8eRK41rXv4uKCl5cXq1evpqSkhKioKLZv3159rjZt2tCtWzeWLFlCdnY2hYWFvPHG\nG8ybN++2dRgZGTFq1Cg++OADxo4dW+O+qamp9O3bl927d1NVVUVhYSExMTG4u7vXuO1uGBoaEhQU\nxNdff01+fj4JCQls3rz5rs4hREMkoS9EPZs9ezYDBw7kscceIyAggJ9++okvvviCZs2a3XR/Ozs7\n1q1bx3fffUdAQAAff/wxy5cvx9XVFSsrKz7//HMOHTpE9+7dCQ4OJiAggKeffvqOahk9ejRJSUn0\n79+flJQU3njjDdauXUuPHj3YvXs3y5cvp0OHDowcOZKcnByWLVtGXFwcvXr14v3332f27NnA/7q+\n33vvPQwNDRk0aBCDBg0iPz//tl31fxk/fjwpKSmMGTOmxv2cnJxYtmwZH3/8MV26dGHw4MEAvPba\nazVuu1uvvfYalZWV9OvXjxdffJFZs2Zd91qF0EUyI58Q4o4pikJlZWX1Z91bt25l8eLFnDp1SuXK\n6kZ5eTkmJiYAhIWFMXHiRE6dOoWlpaXKlQlxb+QtqxDijk2bNo2XXnqJkpISMjMzWb9+Pf369VO7\nrDqxcOFCnnzySfLy8igoKGD16tX4+/tL4AudJlf6Qog7lpiYyOLFiwkPD8fExIRevXrx8ssvY2tr\nq3ZptS4nJ4fFixcTEhKCRqPBz8+PV155BTc3N7VLE+KeSegLIYQQekK694UQQgg9IaEvhBBC6AkJ\nfSGEEEJPSOgLIYQQekJCXwghhNATEvpCCCGEnvj/Bl41y9WpifQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f25d0a2a410>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.title(\"Error in Multivariate Gaussian Covariance Matrix\", fontsize=16)\n",
    "plt.plot(diffs1, label=\"Mean\")\n",
    "plt.plot(diffs2, label=\"Ignore\")\n",
    "\n",
    "plt.xlabel(\"Percentage Missing\", fontsize=14)\n",
    "plt.ylabel(\"L1 Errors\", fontsize=14)\n",
    "plt.xticks(range(0, 51, 10), numpy.arange(0, 5001, 1000) / 5000.)\n",
    "plt.xlim(0, 50)\n",
    "plt.legend(fontsize=14)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In even the simplest case of Gaussian distributed data with a diagonal covariance matrix, it is more accurate to use the ignoring strategy rather than imputing the mean. When the data set is mostly unobserved the mean imputation strategy tends to do better in this case, but only because there is so little data for the ignoring strategy to actually train on. The deflation of the variance benefits the mean imputation strategy because all of the off-diagonal elements should be 0, but are likely to be artificially high when there are only few examples of the pairs of the variables co-existing in the dataset. This weakness in the ignoring strategy also makes it more likely to encounter linear algebra errors, such as a non-invertable covariance matrix."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This long introduction is a way of saying that pomegranate uses a strategy of ignoring missing values instead of attempting to impute them, followed by fitting to the newly complete data set. There are other imputation strategies, such as those based on EM, that would be a natural fit with the types of probabilistic models implemented in pomegranate. While those have not yet been added, they would be a good addition that I hope to get to this year.\n",
    "\n",
    "Let's now take a look at how to use missing values in some pomegranate models!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. Distributions\n",
    "\n",
    "We've seen some examples of fitting distributions to missing data. For univariate distributions, the missing values are simply ignored when fitting to the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting only to observed values:\n",
      "{\n",
      "    \"frozen\" :false,\n",
      "    \"class\" :\"Distribution\",\n",
      "    \"parameters\" :[\n",
      "        -0.0844412750220139,\n",
      "        0.9166407920894343\n",
      "    ],\n",
      "    \"name\" :\"NormalDistribution\"\n",
      "}\n",
      "\n",
      "Fitting to observed and missing values:\n",
      "{\n",
      "    \"frozen\" :false,\n",
      "    \"class\" :\"Distribution\",\n",
      "    \"parameters\" :[\n",
      "        -0.0844412750220139,\n",
      "        0.9166407920894343\n",
      "    ],\n",
      "    \"name\" :\"NormalDistribution\"\n",
      "}\n"
     ]
    }
   ],
   "source": [
    "X = numpy.random.randn(100)\n",
    "X_nan = numpy.concatenate([X, [numpy.nan]*100])\n",
    "\n",
    "print \"Fitting only to observed values:\"\n",
    "print NormalDistribution.from_samples(X)\n",
    "print \n",
    "print \"Fitting to observed and missing values:\"\n",
    "print NormalDistribution.from_samples(X_nan)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This may seem to be an obvious thing to do. However, it suggests a way for dealing with multivariate data being modeled with an IndependentComponentsDistribution when some of the features are missing. Specifically, treat each column independently, and update based on the observed values, regardless of if there is an unobserved value in the same sample but another column. For example:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{\n",
       "    \"frozen\" : false,\n",
       "    \"class\" : \"Distribution\",\n",
       "    \"parameters\" : [\n",
       "        [\n",
       "            {\n",
       "                \"frozen\" : false,\n",
       "                \"class\" : \"Distribution\",\n",
       "                \"parameters\" : [\n",
       "                    -0.08339536402140717,\n",
       "                    0.9112109573110577\n",
       "                ],\n",
       "                \"name\" : \"NormalDistribution\"\n",
       "            },\n",
       "            {\n",
       "                \"frozen\" : false,\n",
       "                \"class\" : \"Distribution\",\n",
       "                \"parameters\" : [\n",
       "                    0.048834959770246114,\n",
       "                    0.9877919452098168\n",
       "                ],\n",
       "                \"name\" : \"NormalDistribution\"\n",
       "            },\n",
       "            {\n",
       "                \"frozen\" : false,\n",
       "                \"class\" : \"Distribution\",\n",
       "                \"parameters\" : [\n",
       "                    0.014464502073682939,\n",
       "                    0.9392312251035693\n",
       "                ],\n",
       "                \"name\" : \"NormalDistribution\"\n",
       "            }\n",
       "        ],\n",
       "        [\n",
       "            1.0,\n",
       "            1.0,\n",
       "            1.0\n",
       "        ]\n",
       "    ],\n",
       "    \"name\" : \"IndependentComponentsDistribution\"\n",
       "}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = numpy.random.normal(0, 1, size=(500, 3))\n",
    "idxs = numpy.random.choice(1500, replace=False, size=500)\n",
    "i, j = idxs // 3, idxs % 3\n",
    "X[i, j] = numpy.nan\n",
    "\n",
    "d = IndependentComponentsDistribution.from_samples(X, distributions=[NormalDistribution]*3)\n",
    "d"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Easy. As we saw above, we can do the same to learn a multivariate Gaussian distribution in the presence of missing data. Again, we don't need to change anything about how we interact with the data, and there are no flags to toggle.\n",
    "\n",
    "The last aspect is that the probability of missing data under any univariate distribution is 1, for the purposes of downstream algorithms."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "NormalDistribution(1, 2).probability(numpy.nan)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In an IndependentComponentsDistribution, this just means that when multiplying together the probabilities of each feature to get the total probability, that some dimensions don't factor into the calculation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.00015597177674513935"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.probability((numpy.nan, 2, 3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.00015597177674513921"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.distributions[1].probability(2) * d.distributions[2].probability(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. K-Means Clustering\n",
    "\n",
    "K-means clustering mostly serves a helper role in initializing mixture models and hidden Markov models. However, it can still be used by itself if desired. In addition to having the same parallelization and out-of-core capabilities of the main models, it also supports missing values now."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X = numpy.concatenate([numpy.random.normal(0, 1, size=(50, 2)), numpy.random.normal(3, 1, size=(75, 2))])\n",
    "X_nan = X.copy()\n",
    "\n",
    "idxs = numpy.random.choice(250, replace=False, size=50)\n",
    "i, j = idxs // 2, idxs % 2\n",
    "X_nan[i, j] = numpy.nan"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Just like the other models, you don't need to change the method calls in order to handle missing data. You can fit a K-means model to data sets with missing values and make predictions on samples with missing values in the same way you would without missing values. The prediction step will assign samples to the nearest centroid in the dimensions that are observed, ignoring the missing values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAy4AAAF3CAYAAABDrR+9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xt8FOXd9/FvSIAQBdQGl0ACVCvI\nQY6iWEAoragUitJG8W65y+2hVKxNxLS12qq3d8tLbeoTbq21tbYFtVKhPATF1mrLoVapEkULeMQn\nQDCkYAXEGCCwzx/jhhxmZ2dnZ3cO+3m/XrxCdvZwZbOZ71wz1/W7cqLRaFQAAAAA4GOdvG4AAAAA\nACRCxwUAAACA79FxAQAAAOB7dFwAAAAA+B4dFwAAAAC+R8cFAAAAgO/Rcckyc+bM0aBBg+L+O3Dg\ngOrq6jRo0CBVV1entS0HDx7U0KFDtXXrVsfPMWjQIA0ePFj19fWm2x999FENGjRIc+bMabltzpw5\nmjt3ruPXbC0T79XHH3+s0aNH60c/+lHc+/z+97/XoEGD9Pbbb9t6zoqKCl100UVuNREA0ipI2TVl\nyhQNGjRIL7/8sun2tWvXatCgQZoyZUrLbTfddJMuuOAC19o4aNAg3X///a49n5mpU6fq2muvjbv9\nueee06BBg7R27Vpbz/d//s//0VlnneVS6xBWeV43AJl39tlnq6qqynRb9+7ddcIJJ+i5555Tjx49\nJEl79uzRhAkT9Oabb7rajg0bNqh79+4aPHhwSs+Tn5+vVatWad68eR22rVq1St26dWtz27333quc\nnJyUXjOmqKiozXuVDt26ddNFF12kp556SjfddJPy8jr+2a5atUrDhg3TGWeckbZ2AICXgpRdBQUF\nWrlypUaPHt1hm1ku3XLLLTpy5IhrbXzuued0wgknuPZ8ZmbOnKmf//zn+uCDD3TyySd32L5q1Sr1\n6tVLEydOTGs7kF244pKFOnfurF69epn+y8nJUW5urnr16qWuXbtKkl599dW0tOP555/XuHHjUu5E\nnHPOOVq5cmWH23fs2KHXXntNY8aMaXP7SSedpJ49e6b0mjHt36t0mTVrlt5//339/e9/77Bt165d\nqqmp0axZs9LaBgDwUpCy65xzztEf//hHHTp0qM3tBw8e1F//+ledffbZbW7v3r27TjnlFNfa2KtX\nLxUUFLj2fGYuvfRSNTc366mnnuqw7eOPP9YzzzyjGTNmKDc3N63tQHah44IOWl9uX7Fiha677jpJ\nxqXnm266qcP9f/rTn+oLX/hCm9uuuuoqDRkyRAcPHmy5rbKyUl/84hdbvv/73/+uz372sy3f/+lP\nf9Ill1yis846S2effbauvfZa1dbWJmzv5MmT9e677+q1115rc3t1dbWGDRumXr16tbm9/VCxRx55\nRBdffLGGDx+ucePGqaysTP/6179sbW8/NOHee+/V+eefr3/+85+67LLLNGLECF1wwQVtOlbRaFT3\n3HOPzjvvPI0aNUplZWXasGGDBg0apI0bN5r+jGeffbb69etnOgTiiSeeUF5eXst7G41Gdf/99+vC\nCy/UiBEjNGHCBH3/+9/Xvn37TJ97+/btGjRokFavXt3m9gsuuEC33HJLy/f19fUqKyvTxIkTNWLE\nCF1xxRVtDgyOHTumqqoqTZkyRWeddZYmTJigW2+9VY2NjaavCwBu8iq7zIwfP14ff/yx/vKXv7S5\n/c9//rNOPPHEDkOi2g8Ve+qpp3TJJZdo5MiROuecc3T11Vdr27Zttre3Hiq2YsUKDRo0SO+++67m\nzp2rUaNGafLkyfrVr37Vpg2LFy/WpEmTNGLECF155ZV64403LIfe9enTR+ecc45WrVrVYduzzz6r\nxsbGNifUHnvsMc2YMUOjRo3SuHHjdP311+u9994zfe7m5mYNGjRIv/zlL9vcPnfu3Db5vX//ft1y\nyy2aMmWKhg8frlmzZmndunVtHrNkyRJddNFFLRleXl6uvXv3mr4u/I+OCyxNmzZN3/zmNyUZl55b\nH8jGfPazn9XOnTu1Z88eScYO5+WXX9app56qTZs2tdxv48aNLTv7+vp61dbW6rzzzpMkrVu3ruWg\nuLq6Wr/+9a/1/vvva+7cufr4448t23jaaadp4MCBHa66PPHEE7r44ostH/v3v/9dP/7xjzVv3jz9\n8Y9/1C9/+Us1NDTou9/9rq3tZj7++GPdfffdqqioUHV1tYYMGaIf/OAHamhokGSEyC9/+UtdddVV\n+sMf/qBhw4bp9ttvt2ynZFyW/8tf/tImUGM/55QpU3TSSSdJMua73Hfffbrhhhv0pz/9SYsWLdLG\njRst58gkcujQIX3961/Xu+++q3vuuUfLly9X37599V//9V/atWuXJCOUHn74Yd122216+umndc89\n92jDhg268847Hb8uADiRqeyK58QTT9SECRM6HPSvWrVKF154oTp1in/4tW3bNlVUVGj69Ol68skn\ntWTJEnXu3FnXXnutotFowu3x3HbbbZo7d66qq6t1wQUX6Cc/+Yn++c9/SjKGvy1cuFDTpk3TihUr\ndPHFF1vmXMysWbO0adMmbd++vcPP2Xr48t/+9jfdfvvtuvzyy7V69Wr96le/UkNDg2688caEr2Fl\n/vz5eu6553Tbbbdp5cqVOvfcczV//vyWE5nr1q3TnXfeqeuuu64lw3ft2qXvfe97Kb0uvEPHBZby\n8/Nbxsn26tVL3bt373Cf0aNHq2vXrqqpqZEkbdmyRSeccIImT57ccgWhqalJmzdv1vjx4yUZHYKS\nkhKVlJRIMs70jBo1SjfeeKNOO+00DR8+XHfddZfq6+v117/+NWE7p0+frtWrV+vw4cOSpE2bNmnH\njh2aNm2a5ePefvttFRQUaMaMGerbt6+GDx+u//3f/205O5dou5kDBw6ovLxc55xzjgYMGKCrrrpK\nR44c0RtvvCFJWrlypcaMGaOrr75ap512mq655hoNHTo04c946aWX6tChQ/rzn//cctuWLVv0zjvv\ntDmrdfHFF+uJJ57QRRddpKKiIo0ZM0bTpk0zHWZm19NPP63t27frrrvu0tixY3XGGWdo4cKF6tat\nmx577DFJ0jvvvKPi4mJNmjSp5UzcQw89pP/6r/9y/LoA4ESmssvK9OnT9dxzz7Wc3W9oaNA//vGP\nhLn07rvv6ujRo5o1a5aKi4t15pln6q677lJlZaWi0WjC7fGUlpZq8uTJ6tevX0unLnaAv3LlSvXp\n00ff/e53dfrpp7fcN5GpU6eqoKCgzVWX999/X88//3ybXBo9erSeeOIJfe1rX1OfPn00bNgwlZaW\n6pVXXnF8Vb6mpkYbN27UD37wA02aNEmnnXaavve97+mMM87Qb37zG0lGhp944on64he/2JLh9913\nn77zne84ek14j45LFnrxxRc1atSoDv9aXwpPRteuXTV69OiWCiovvviixowZo5EjR7YEwiuvvCJJ\nGjt2rCRjjHDrS+2bN2/WqFGj2jzvpz/9afXo0UNbtmxJ2Ibp06dr//79LZeIq6urNXr0aPXu3dvy\nceedd54OHz6sr371q1q2bJl27dqlU089VWeeeaat7fG0HgYQm7S4f/9+SUYoDRs2rM39J0yYkPBn\n7Nu3r8aOHdsmIMwmP3br1q1lbPE555yjUaNG6aGHHmp5fSdee+01nXLKKRoyZEjLbV26dNGIESP0\n+uuvS5ImTZqkN998U9/4xjf05JNP6v3331dJSYk+/elPO35dAIjxY3ZZ+fznP68uXbroySeflGRc\nHY9EIqYT9lsbOXKkevbsqf/8z//UI488om3btqlHjx4aPny4OnXqlHB7PK1zKTaf5sCBA5KMXBo6\ndGibeTt2cqmgoEAXXXSRnnjiiZbbVq9erZycnDa/l4KCAr300kv68pe/rHPPPVejRo3SHXfcoWg0\n2tKGZMU6XbFOZczYsWNbcmn8+PFqbGzUV7/6VS1fvlzvvfeeIpFIwgyHf9FxyULDhw/XypUrO/xr\nP5Y0GZ/97GdbdvQvvfSSxo4dqzFjxujVV1/V4cOHtXHjRo0cOVInnHCCotGoNmzY0OZS+8GDB00r\noBQUFHQYGmWmb9++GjlypFauXKkjR47oj3/8o60wGzRokB599FH17t1bd955p6ZMmaLZs2e3XB1J\ntN1Mbm6uunTp0vJ9LAhiZ8L27dvX4exf+3k48cyaNUv/+Mc/1NDQoKNHj2r16tUdJj/+6Ec/0r33\n3qsvf/nLWrJkiVauXKmvfvWrtp4/noMHD+qDDz7ocMCwbt26lrOJkydP1oMPPihJuvnmmzVhwgRd\nc801cUtVA0Ay/JhdVrp166YpU6a0DGOODV9OVJCmV69eWrp0acvVgWnTpmn69OnasGGDre1W7Ylx\nM5cuvfRSbd++vaWTt2rVqjbDlyXpwQcf1B133KEJEyboN7/5jVauXKkbbrjB1vPHEzs2GD9+fJtc\neuyxx1pyafDgwXr00Ud16qmnauHChfrc5z6n2bNnu15pDplDOeQslJ+fr/79+7v6nOPGjdOiRYt0\n8OBB1dTUaMGCBSopKVHPnj21ZcsWvfTSSy1nqd544w39+9//1rhx41oe3717d9MOysGDB00v8ZuZ\nMWOG7rzzTv3lL3/RgQMHbK9TMnz4cFVVVenIkSN68cUXdffdd+sb3/iG1q5dq06dOllud6JLly4d\nKs3YPeN04YUX6o477tDq1at15plnas+ePR2qia1evVpf+tKX2kxgjA2hM9M+wGJaX74/8cQTVVhY\nqEcffbTD4zt37tzy/4kTJ2rixIlqamrS+vXrtXDhQt1444363e9+Z+vnA4B4/JhdicyYMUPz5s3T\nmjVr9MYbb+jHP/6xrceddtppWrhwoY4dO6ZNmzapqqpK1157rdasWaOTTjop4fZkde3a1XEujR07\nVsXFxXryySd1yimn6J///Ke+9a1vtbnPk08+qXPPPbdNZ+XYsWNxn9Mql2LV0rp3766cnBwtX768\nwzIBrTuHI0aM0KJFi3TkyBFt2LBBd999d8vvxK2lEZA5XHGBbVZjZ4cNG6YTTjhBS5cuVadOnTRw\n4EBJxrjW559/Xq+++mqbMcJDhgxpU/d92LBhHRbrevvtt3Xw4EHbC1JdfPHFLZWtzj33XH3qU59K\n+JiXX3655XJz586dNX78eH3rW99SQ0OD9u/fn3C7EwMGDOgw/K31vBUrBQUFuvDCC/XMM8/omWee\nMV275ciRI22GyDU1NemZZ56J+/s78cQTJanNz1NXV9em6srw4cP173//u+XAIfZPkgoLCyVJ69ev\nb6lqk5+fr6lTp+prX/ua7UUxASAd0pldiUyYMEEnn3yy7rrrLvXv37/DMGEzb7zxRsvVk06dOmn0\n6NG66aab1NjYqLq6uoTbnejfv7/jXMrJydEll1yiZ599Vn/+859N125pn0vRaLRlCJ3Z7yc3N1cF\nBQVtcungwYNtKqedddZZikajOnjwYJtcys3NbcmlmpqalgIEnTt31sSJEzV//nzV19fbGs0B/6Hj\ngoRii3k9++yzevfdd03v06lTJ51zzjl65JFHNHr06JZxtmPGjNEf/vAHdenSpWWH/cILL3S41H7l\nlVfqtdde0z333KPa2lrV1NToe9/7ngYMGNBmdWErp5xyis477zz9v//3/xJOfoxZs2aNrrvuOq1Z\ns0bvvfee3njjDT3++OP6zGc+o5NPPjnhdicuuugivfDCC3rsscdUW1urBx98UO+8847tx1966aXa\ntGmT/vSnP5mu3TJixAg99dRTeuONN7R582Zdc801mjhxoo4dO6aNGzd2uPpy8sknq0+fPlq+fLne\nfPNNbd68WT/84Q/Vp0+flvtMnTpVffv21Q033KCXX35ZdXV1WrZsmWbOnNkSPsuXL1d5ebn+8Y9/\nqL6+Xq+++qqeeuqplrHhAJBJmciuRPLy8nThhRcmlUubNm3S/PnztWrVKtXV1Wnbtm1asmSJTj75\nZH3mM59JuN2Jiy66SLW1tbrvvvtUW1urZcuW6YUXXrD9+EsuuUQNDQ1avHix6dotI0aM0Pr16/Xy\nyy/r7bffVllZWUtRmpqaGtMJ+kOGDNEf//hHvfbaa3rrrbf0/e9/v6VDIhmdy1GjRunmm2/WCy+8\noLq6Oj399NMqLS3VQw89JMn43V933XVau3at3nvvPb3++utavny5zjzzTNujOeAvdFyQ0NSpUzV0\n6FDdcMMNuueee+Le77zzzlN9fX2bhbXGjBmjXbt26dxzz1Vubm7LmOH2kxvHjx+vRYsWae3atZo+\nfbquvfZa9e/fX4sXL24zXySR6dOnq3Pnzpo6daqt+3/729/WjBkz9N///d+aOnWqrrrqKnXr1k0/\n//nPbW134sorr1RpaakqKyt12WWXqba2VgsWLJAkWwtZnnPOOerTp48+/PBD03k8t99+u0466SRd\nfvnluvHGG3XFFVfoO9/5jj796U/r6quv7tBJysnJ0d13360jR46otLRU3/nOd/T1r3+9zdmx/Px8\nLV68WIWFhfrGN76h6dOna8mSJbr55ptbOk8//vGPddZZZ2nBggW64IILdP3112vw4MEplWEGAKcy\nkV12zJgxQ5JsFxG4/PLL9c1vflP33XefLr74Yv3Hf/yH9u7dq1/96lfKz89PuN2J6dOn65vf/KYe\neeQRzZo1S+vXr9dtt90myV4ulZSUaOzYsabDlyXphhtu0NChQ3XllVfqmmuu0dlnn63bbrtNI0aM\n0Pe//33T+Tm33XabCgsLNWfOHH3zm9/U5MmT24zAyMnJ0QMPPKARI0ZowYIFmjZtmu655x7NnTu3\nZQ2fG264QV/84hd1++23a+rUqbr66qt14okn6r777nP0PsF7OVGra6gAXHf06FF98MEHbc4cPfbY\nY7r99tu1YcMGx1dyAABw4tixY3r//ffbTMhfv369rrnmmpb1xgA/4IoLkGFLly7VpEmTtGLFCu3a\ntUvPP/+8fvnLX+rzn/88nRYAQMb97W9/04QJE/Tggw9q586devnll/XTn/5UQ4YMaVMGH/AaV1yA\nDItGo3rwwQe1bNky7d69W4WFhZo4caIWLFjgqBoMAACpWrZsmRYvXqydO3eqe/fuGjt2rL773e+q\nqKjI66YBLei4AAAAAPA9hooBAAAA8D06LgAAAAB8Ly/xXdxRU1OTqZcCAFgYM2aM103wJXIKAPwh\nXk5lrONi1Yh4ampqAhmwtDuzaHdm0e7McrvdHJxbc/Je89nKLNqdWbQ7s2i3dU4xVAwAAACA79Fx\n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\nfuTssRSfOY6OC2CTH8JASnw2KJ3VXAoKpOLiw56sItzYKK1aZb7tiSesfy+NjdK6dT1NtxEIAMLA\nT1eVvcwpybussprf89FH0p49zh5L8ZnjHHVcPv74Y5WVlelrX/uaSktLtWbNGrfbBfiGn8KgNbOz\nQWE+Y5PKTr2+Xmpo6OrosQgusgrZxIsSxIlkW06lMr/Hq7lBQeOo47JmzRoNGzZMjzzyiKqqqnTn\nnXe63S7AN/wYBvGE+YxNqoEQiRxy9FgEF1mFbBGkzkCYcyqVqmR+qWjmd446LtOmTdM111wjSaqv\nr1ckEnG1UYBfBCkMpPCdsWk9PC/VQJg0ab+jxyK4yCpkiyB1BsKcU1JqVckqK6XZsxscVzTLBjnR\naDTq9MGzZ8/W7t279cADD+jMM8+0vG9NTY3TlwE8U1fXRbNmDdOxYzkdtnXqFNWKFZtVXHzYg5bF\nV1lZrKVLOx6gzZ7doIqKOg9alLzmZmMy/bp1PdXQ0FWRyCFNmrRf3/pWne67r1jr1/fU7t1d1bv3\nIZ1//n6Vl9clnHwZe04njw2bMWPGeN2EjLKbVeQUgqqpKUelpUNUX5/fYVufPk16/PGtys93fLjn\nujDnVCxTmppytHdvZxUWHkn6vU/lsWERN6eiKdq6dWt0+vTp0WPHjlneb+PGjUk/t5PH+AHtzqx0\ntvujj6LRAQOiUanjvwEDjO1OpavdR45Eo2VlRvtyc42vZWXG7W6Itfujj6LRd95J7j2w+5iyMvP3\nvKwsuedxq91ecvtzEtS/81TZySqn701Q31PanVnpbnei/aZT6Wh3unMqGjXa7WVOpdLuIHKz3VbP\n5Wio2ObNm1X/yXXHwYMH6+jRo/r3v//tuFcF+FUQx5ymWoM+ETvFCtpfOk+mwIGd4XnJlKmMtaWp\nybhq5nYpZvgXWYVskurCiZmUiZxKtJBjunMqGX6pWhoEjj4iGzdu1K5du3TLLbdo7969amxs1Mkn\nn+x22wBfiO30q6uNscIlJUanxQ9h0NhojF0uKup4IB47QHdbVVWxli49/n2sWIFkvCcVFcZ7tWOH\nMY555kyjqMG995o/pqqq7fPbGatt5+dqbm7blkhkiC67zGhjtg0Ny1ZkFbJJrDOwcGH8XPCCFzkV\nW8gxJig51a+fNG5csR5+mJyKx9HbMnv2bN1yyy36j//4DzU1NenWW29Vp04sCYNWrPZUAePHMDDb\n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\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f25d033ecd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model1 = Kmeans.from_samples(2, X)\n",
    "model2 = Kmeans.from_samples(2, X_nan)\n",
    "\n",
    "y1 = model1.predict(X)\n",
    "y2 = model2.predict(X_nan)\n",
    "\n",
    "plt.figure(figsize=(14, 6))\n",
    "plt.subplot(121)\n",
    "plt.title(\"Fit w/o Missing Values\", fontsize=16)\n",
    "plt.scatter(X[y1 == 0,0], X[y1 == 0,1], color='b')\n",
    "plt.scatter(X[y1 == 1,0], X[y1 == 1,1], color='r')\n",
    "\n",
    "plt.subplot(122)\n",
    "plt.title(\"Fit w/ Missing Values\", fontsize=16)\n",
    "plt.scatter(X[y2 == 0,0], X[y2 == 0,1], color='b')\n",
    "plt.scatter(X[y2 == 1,0], X[y2 == 1,1], color='r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that there are some blue points in the red cluster on the right plot because those samples are entirely NaN. Any sample that is entirely NaN is assigned to cluster 0. Otherwise, it's still able to identify the two clusters even there there are many missing values."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. General Mixture Models\n",
    "\n",
    "Missing value support for mixture models follows that of k-means fairly closely. Essentially, one passes in a data set containing missing values denoted as `numpy.nan` and they get used appropriately for the fit and predict steps. All methods automatically handle missing values appropriately without any additional flags or methods. \n",
    "\n",
    "Since training is an iterative procedure that involves calculating the probabilities of samples given each component, multivariate Gaussian mixtures will be much slower when handling missing values than they would be when using only observed values. This is because an inverse covariance matrix has to be calculated by subsetting the covariance matrix and inverting it based only on the observed dimensions for each sample. Each sample, then, needs its own matrix inversion. Since there is no single inverse covariance matrix, one also cannot use BLAS or a GPU to accelerate this step. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10 loops, best of 3: 34.8 ms per loop\n",
      "1 loop, best of 3: 22.3 s per loop\n"
     ]
    }
   ],
   "source": [
    "X = numpy.concatenate([numpy.random.normal(0, 1, size=(1000, 10)), numpy.random.normal(2, 1, size=(1250, 10))])\n",
    "\n",
    "idxs = numpy.random.choice(22500, replace=False, size=5000)\n",
    "i, j = idxs // 10, idxs % 10\n",
    "\n",
    "X_nan = X.copy()\n",
    "X_nan[i, j] = numpy.nan\n",
    "\n",
    "%timeit GeneralMixtureModel.from_samples(MultivariateGaussianDistribution, 2, X, max_iterations=10)\n",
    "%timeit GeneralMixtureModel.from_samples(MultivariateGaussianDistribution, 2, X_nan, max_iterations=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "However, if one was modeling each dimension independently, there should be no hit at all!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "100 loops, best of 3: 3.49 ms per loop\n",
      "100 loops, best of 3: 3.69 ms per loop\n"
     ]
    }
   ],
   "source": [
    "%timeit -n 100 GeneralMixtureModel.from_samples([NormalDistribution]*2, 2, X, max_iterations=10)\n",
    "%timeit -n 100 GeneralMixtureModel.from_samples([NormalDistribution]*2, 2, X_nan, max_iterations=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. Naive Bayes / Bayes Classifiers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Support for these models mirrors what's been seen before. However, since the fitting step does not involve calculating probabilities of samples, it should be no slower to train them on data sets involving missing values than to train them on dense data sets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "100 loops, best of 3: 3.2 ms per loop\n",
      "100 loops, best of 3: 4 ms per loop\n"
     ]
    }
   ],
   "source": [
    "y = numpy.concatenate([numpy.zeros(1000), numpy.ones(1250)])\n",
    "\n",
    "%timeit -n 100 BayesClassifier.from_samples(MultivariateGaussianDistribution, X, y)\n",
    "%timeit -n 100 BayesClassifier.from_samples(MultivariateGaussianDistribution, X_nan, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since pomegranate also has semi-supervised learning built-in, this means that one can now fit Bayes classifiers on data sets with missingness in both the labels and in the values! Since semi-supervised learning does rely on EM, it will be slower to train multivariate Gaussian models with missing values than not to."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1] Improvement: 50.9041578247\tTime (s): 1.117\n",
      "[2] Improvement: 0.0770505675373\tTime (s): 1.13\n",
      "Total Improvement: 50.9812083923\n",
      "Total Time (s): 3.5037\n"
     ]
    }
   ],
   "source": [
    "idx = numpy.random.choice(2250, replace=False, size=750)\n",
    "y_nan = y.copy()\n",
    "y_nan[idx] = -1\n",
    "\n",
    "model = BayesClassifier.from_samples(MultivariateGaussianDistribution, X_nan, y_nan, verbose=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "100 loops, best of 3: 17.4 ms per loop\n",
      "1 loop, best of 3: 3.31 s per loop\n"
     ]
    }
   ],
   "source": [
    "%timeit BayesClassifier.from_samples(MultivariateGaussianDistribution, X, y_nan)\n",
    "%timeit BayesClassifier.from_samples(MultivariateGaussianDistribution, X_nan, y_nan)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. Hidden Markov Models\n",
    "\n",
    "Hidden Markov models are slightly different from the others, in that they operate over sequences. This adds another level of complication to the model because the forward and backward algorithms are needed in order to identify the best component for each observation. Typically this involves calculating the probability of each observation given each state, and taking the sum of all paths through the model, multiplying the transition probability of each edge crossed by the emission probability of the state you transition to emitting the next character. If this is a univariate model and the character is missing, you ignore the emission probability and just multiply by the transition probability. This is easily done by having the probability of missing values be 1 under all univariate models."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "d1 = DiscreteDistribution({'A': 0.25, 'B': 0.75})\n",
    "d2 = DiscreteDistribution({'A': 0.67, 'B': 0.33})\n",
    "\n",
    "s1 = State(d1, name=\"s1\")\n",
    "s2 = State(d2, name=\"s2\")\n",
    "\n",
    "model = HiddenMarkovModel()\n",
    "model.add_states(s1, s2)\n",
    "model.add_transition(model.start, s1, 1.0)\n",
    "model.add_transition(s1, s1, 0.5)\n",
    "model.add_transition(s1, s2, 0.5)\n",
    "model.add_transition(s2, s2, 0.5)\n",
    "model.add_transition(s2, s1, 0.5)\n",
    "model.bake()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now let's run the forward algorithm on a simple sequence."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.       ,  0.       ,  1.       ,  0.       ],\n",
       "       [ 0.25     ,  0.       ,  0.       ,  0.       ],\n",
       "       [ 0.09375  ,  0.04125  ,  0.       ,  0.       ],\n",
       "       [ 0.016875 ,  0.045225 ,  0.       ,  0.       ],\n",
       "       [ 0.0077625,  0.0208035,  0.       ,  0.       ]])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numpy.exp(model.forward(['A', 'B', 'A', 'A']))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's see what happens when we remove one of the characters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.      ,  0.      ,  1.      ,  0.      ],\n",
       "       [ 0.25    ,  0.      ,  0.      ,  0.      ],\n",
       "       [ 0.125   ,  0.125   ,  0.      ,  0.      ],\n",
       "       [ 0.03125 ,  0.08375 ,  0.      ,  0.      ],\n",
       "       [ 0.014375,  0.038525,  0.      ,  0.      ]])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numpy.exp(model.forward(['A', 'nan', 'A', 'A']))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that initially the first character is aligned to s1 because there is a 100% chance of going from the start state to s1. The value is 0.25 because it is equal to the transition probability (1.0) multiplied by the emission probability (0.25). In the next step, you can see that the probability is equally diffused between two options, staying in the current state (transition probability of 0.5) and moving to s2 (also transition probability of 0.5). Since the character is missing, there is no emission probability to multiply by. \n",
    "\n",
    "If we want to decode the sequence we can call the same methods as before."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0, 1, 0, 0, 1, 1]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.predict(['A', 'A', 'B', 'B', 'A', 'A'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0, 0, 0, 0, 0, 1]"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.predict(['A', 'nan', 'B', 'B', 'nan', 'A'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Fitting is pretty much the same story as the previous models. Like the Bayes classifiers, one can now train a hidden Markov model in a supervised manner, having some observations in the sequence missing, but also labels on each observation. Labeled missing data can still be used to train the transition parameters."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6. Bayesian Networks\n",
    "\n",
    "Bayesian networks could previously handle missing data in the `predict` and `predict_proba` methods. In fact, handling missing data was the area in which they excelled. However, one couldn't calculate the probability of a sample containing missing values, fit a Bayesian network to incomplete data sets, or learn the structure of a network on incomplete data sets. The new missing value support allows all of these things (except Chow-Liu tree building on missing data sets)! To be clear, there is a very common iterative technique for fitting/learning models on incomplete data sets using an iterative EM based approach. This does not do that. This only ignores sufficient statistics from missing samples, and so is not an iterative approach.\n",
    "\n",
    "Learning the structure of a network on an incomplete data set should take a similar amount of time as learning it on a complete data set. If you are indicating missing values in numeric data sets, you will have to convert your data set to floats, whereas previously integers would be fine. If your data set is complete, there is no need."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "100 loops, best of 3: 242 ms per loop\n",
      "100 loops, best of 3: 251 ms per loop\n"
     ]
    }
   ],
   "source": [
    "X = numpy.random.randint(3, size=(500, 10)).astype('float64')\n",
    "\n",
    "idxs = numpy.random.choice(5000, replace=False, size=2000)\n",
    "i, j = idxs // 10, idxs % 10\n",
    "X_nan = X.copy()\n",
    "X_nan[i, j] = numpy.nan\n",
    "\n",
    "%timeit -n 100 BayesianNetwork.from_samples(X, algorithm='exact')\n",
    "%timeit -n 100 BayesianNetwork.from_samples(X_nan, algorithm='exact')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Conclusions\n",
    "\n",
    "Missing value support has been added to pomegranate as of v0.9.0! A lot of care was taken to make the interface as simple to the end user while not compromising on speed. While multivariate Gaussian distributions, and the compositional models that are built on top of them, may be slower on incomplete data sets than on complete ones, everything else should take a similar amount of time!\n",
    "\n",
    "The implemented missing value support focuses on ignoring data that is missing. Another approach that works well is to use an EM based algorithm to impute the missing values based on the observed values and the model and fit to that complete data set. This works well in the framework of probabilistic modeling and is a natural addition to pomegranate that I hope to add in the coming year.\n",
    "\n",
    "As always, feedback and questions are always welcome!"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
